2011-12-12 85 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/ –