通过在参数中传递停止函数来clearInterval
clearInterval by passing a stop function in parameter?
我正在流式传输ajax调用,如果按下"left"键,我想停止流。然而,这个函数stream_ajax
是一个模板,我在我的代码中多次使用,所以我想传递一个clearInterval
语句,它将检测"左"键是否被按下。
function stop() {
$(document).keydown(function(e) {
if(e.keyCode == 37) {
return false;
}
});
}
function stream_ajax(callback, stop) {
stream = setInterval(
function(){
// get page
},
10000
);
if(stop() == false) {
clearInterval(stream);
}
}
我的代码似乎不工作,我能够通过相同的方法获得回调工作。有人知道为什么这行不通吗?
您将希望将流传递给stop
,并在keydown处理程序中执行clearInterval
,如下所示:
function stop(stream) {
$(document).keydown(function(e) {
if(e.keyCode == 37) {
clearInterval(stream);
}
});
}
function stream_ajax(callback, stop) {
stream = setInterval(
function(){
// get page
},
10000
);
if (stop) // in case no stop function was passed in
stop(stream);
}
您的stop()
函数没有显式返回值,这意味着它总是返回undefined
。您拥有的return false
在keydown处理程序函数中,而不是stop()
的一部分。.keydown()
方法分配一个新的keydown处理程序,它不测试过去是否按过一个键。
你可以这样做:
function stream_ajax(callback, stop) {
var stream = setInterval(
function(){
// get page
},
10000
);
$(document).keydown(function(e) {
if(e.keyCode == 37) {
clearInterval(stream);
$(document).off("keydown");
}
});
}
也就是说,在设置间隔后绑定一个keydown处理程序,并且在该处理程序中,如果你关心的键被按下,则清除间隔并删除keydown处理程序。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- Javascript-从函数中使用clearInterval后重新激活setInterval
- 如何使 clearInterval 函数工作
- 如何从一个函数调用 clearInterval() 方法以停止另一个函数中的 setInterval() 方法
- 如何正确使用 setInterval 和 clearInterval 在两个不同的函数之间切换
- Coffeescription:setInterval、clearInterval和匿名函数
- 函数中的Javascript clearInterval
- 为什么clearInterval()函数不停止javascript定时器
- 通过在参数中传递停止函数来clearInterval
- 什么是错误的setInterval()和clearInterval()在这个javascript函数?clearInte
- 在函数中使用clearInterval来清除另一个函数中的setInterval
- setInterval函数即使使用clearInterval(计时器)也不会停止
- ClearInterval函数在我的情况下不起作用
- setInterval和clearInterval在同一个函数中
- clearInterval函数不能与backbone.js一起工作
- 如何停止嵌套在函数中的setInterval和该函数之外的clearInterval
- 如何测试clearInterval函数是真还是假
- javascript clearInterval无法处理数组函数
- jQuery不同函数中的startInterval和clearInterval