2013-09-24 25 views
0

我有幾個<span>標記持有秒。
例子:
<span class="timeout">27</span>
<span class="timeout">58</span>更新從x秒向上計數的單個跨度標記

我試圖通過每次1秒遞增它們,但我有一些困難,即,它把錯誤的數據在<span>標籤。

我必須做一些錯誤的,下面是我嘗試使用代碼..
它必須是錯誤的,錯誤百出,但是好了,我還在努力學習它;-)

function timer() { 
    var self = $(this); 
    var idx = $("span.timeout"); 
    var sec = parseInt(self.find('span.timeout').text()) 
    var interval = setInterval(function() { 
     idx.each(function() { 
      idx.text(sec++) 
     }); 
    }, 1000); 
} 

在此先感謝,
- 羅伯特。

回答

1

你想要做這種方式:

function timer() { 
    var self = $(this); 
    var idx = $("span.timeout"); 
    //console.log(self.find('span.timeout').text()); //gets you nothing 
    var interval = setInterval(function() { 
     idx.text(function (_, txt) { //use .text() 
      return parseInt(txt, 10) + 1; //convert the current text to int and increment it. 
     }); 
    }, 1000); 
} 

Fiddle

你的問題就在這裏var sec = parseInt(self.find('span.timeout').text())自它只是在你的情況下,一個窗口,你正在努力尋找在其中跨度和獲取它的文本。哪一個得到你什麼,你正在做一個parseInt沒有什麼可以讓你NAN,然後你用它來計算,這是錯誤的。因此,您可以使用文本函數的回調並獲取該範圍的當前文本值,然後返回該範圍的更新值。

+0

添加一些解釋$(「span.timeout」)返回一個集合不是一個單一的元素,你需要遍歷它們使用.each(): –

+0

良好的舊代碼第一次編輯解釋後回答:) –

+0

@PatsyIssa以及你不需要使用每一個,因爲.text總是使用。每個底部 – PSL