Javascript 通过在参数中传递停止函数来清除间隔?
我正在流式传输ajax调用,如果按下“left”键,我想停止流。但是,这个函数Javascript 通过在参数中传递停止函数来清除间隔?,javascript,Javascript,我正在流式传输ajax调用,如果按下“left”键,我想停止流。但是,这个函数stream\u ajax是我在整个代码中多次使用的模板,因此我想传递一个clearInterval语句来检测是否按下了“left”键 function stop() { $(document).keydown(function(e) { if(e.keyCode == 37) { return false; } }); } function s
stream\u ajax
是我在整个代码中多次使用的模板,因此我想传递一个clearInterval
语句来检测是否按下了“left”键
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()
函数没有显式返回值,这意味着它总是返回未定义的。您拥有的返回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处理程序。您将希望将流传递到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);
}
我真的很感激这个答案,我希望有一个完全的外部功能,所以保罗·鲁布得到了正确的答案。谢谢你抽出时间,我真的很感激+1.比我的答案更接近原始代码。请注意,如果反复调用stop()
,它将绑定越来越多的keydown处理程序,因此最好在.keydown()之前包含对.off()
的调用。
@nnnnnn我不确定我是否理解,你是说你在代码中做了什么?如果我在clearInterval(流)之后使用return false
会是相同的吗?$(document).off(“keydown”).keydown(…
或类似于我的回答中的内容。返回false会取消当前事件的默认行为,但不会删除处理程序。