我想如果我打電話給我的第二個if else工作,那麼第一個應該停止。但那也繼續運行。如果第一個運行第二個應停止。停止jquery事件
if(e.keyCode == 39) {
setInterval(function(){
//
}, 10);
} else if(e.keyCode == 37) {
setInterval(function(){
//
}, 10);
}
我想如果我打電話給我的第二個if else工作,那麼第一個應該停止。但那也繼續運行。如果第一個運行第二個應停止。停止jquery事件
if(e.keyCode == 39) {
setInterval(function(){
//
}, 10);
} else if(e.keyCode == 37) {
setInterval(function(){
//
}, 10);
}
setInterval()返回設置的定時器的ID,它可以用來停止它。
像這樣的東西應該工作:
var intervalId1, intervalId2;
if(e.keyCode == 39) {
intervalId1 = setInterval(function() { ... }, 10);
if (intervalId2) {
clearInterval(intervalId2);
}
} else if(e.keyCode == 39) {
intervalId2 = setInterval(function() { ... }, 10);
if (intervalId1) {
clearInterval(intervalId1);
}
}
你需要使用一個變量,它是一個共享範圍
//in a shared scope, probably outside teh function where this code is placed
var interval;
if (e.keyCode == 39) {
if (interval) {
clearInterval(interval);
}
interval = setInterval(function() {
//
interval = undefined;
}, 10);
} else if (e.keyCode == 37) {
if (interval) {
clearInterval(interval);
}
interval = setInterval(function() {
//
interval = undefined;
}, 10);
}
的setInterval返回的句柄,你可以用它來停止/清除間隔。
將此句柄存儲在函數本身之外也很重要,否則下一次該函數運行時它將被清除。
由於您只關心一個間隔運行,您還只需要存儲一個句柄。
//define globally outside your function
var interval = null;
//your function starts here
interval && clearInterval(interval); // (same as if(interval){clearInterval(interval);})
if(e.keyCode == 39) {
interval = setInterval(function(){
//
}, 10);
} else if(e.keyCode == 37) {
interval = setInterval(function(){
//
}, 10);
}
使用一個變量interval
存儲的setInterval每當返回ID呼叫功能清除該時間間隔你會得到你所需要的。
var interval;
$("#text_box").keydown(function(e){
e.preventDefault();
if(e.keyCode == 39){
clearInterval(interval);
interval=setInterval(sample1,1000);
}
else if(e.keyCode == 37){
clearInterval(interval);
interval=setInterval(sample2,1000);
}
});
function sample1(){
console.log("1");
}
function sample2(){
console.log("2");
}
看看這個例子http://www.w3schools.com/jsref/met_win_clearinterval.asp – 2015-02-10 07:29:24