我正在播放ajax调用,如果按下“左”键,我想停止流。但是,这个函数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);
}
}
我的代码似乎不起作用,我能够通过相同的方法获得回调。有谁知道为什么这不起作用?
答案 0 :(得分:2)
您需要将流传递给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 :(得分:1)
您的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处理程序。