2011-12-12 136 views
2
<span id="ccc">10</span> <span id="start">start</span> <span id="stop">stop</span> 

$('#start').click(function(){ 
    var c = $('#ccc').text(); 
     var inter = setInterval(function() { 
        c--; 
        $('#ccc').text(c); 
      }, 1000); 
}); 

$('#stop').click(function(){ 
    clearInterval(inter); 
    }); 

我該如何重寫正確使用STOP?如何停止setInterval?

LIVE:http://jsfiddle.net/c3hZh/

回答

5

inter需要在兩個功能的範圍內。用閉包包裝這兩個函數,這樣就可以避免用新變量污染全局名稱空間。

(function ($) { 
    var inter; 

    $('#start').click(function(){ 
    var c; 
    c = parseInt($('#ccc').text()); //make sure you're getting a numeric value 
    //don't forget to clear any existing interval before setting a new one: 
    if (inter) { 
     clearInterval(inter); 
    } 
    inter = setInterval(function() { 
     c--; 
     $('#ccc').text(c); 
    }, 1000); 
    }); 

    $('#stop').click(function() { 
    clearInterval(inter); 
    }); 
}(jQuery)); 
+2

+1用於*避免污染全局名稱空間*。 – RightSaidFred

3

inter是一個局部變量。
它不存在於回調之外。

您需要使用全局變量。

+4

希望不是全球性的,但它肯定需要兩個回調都可以訪問。 – RightSaidFred

+2

他不用「* need *」來使用全局變量,他也可以在與setInterval相同的範圍內調用$('#stop')。click(...)'。 –

+1

@refp:這會爲每次點擊另一個按鈕添加一個單獨的點擊處理程序。那裏'.one'會更好。 – SLaks

2
 
var inter = 0; 
$('#start').click(function(){ 
    var c = $('#ccc').text(); 
     inter = setInterval(function() { 
        c--; 
        $('#ccc').text(c); 
      }, 1000); 
}); 

$('#stop').click(function(){ 
    clearInterval(inter); 
    }); 
+1

http://jsfiddle.net/c3hZh/1/ –