clearInterval通过在参数中传递一个停止函数?

时间:2013-04-30 21:37:10

标签: javascript

我正在播放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);
    }
}

我的代码似乎不起作用,我能够通过相同的方法获得回调。有谁知道为什么这不起作用?

2 个答案:

答案 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处理程序。