停止超时功能

时间:2011-10-02 13:02:04

标签: javascript

在此代码中:

$("a").live("click", function(e) {
    e.preventDefault();
    setTimeout(function () {
        $.get(
            "someOtherUrl",
            {someVariable: "someValue"},
            function(result) {
                $(".result").html(render(result));
            }
        );
    }, 1000);
    $('a').live("touchmove", function(e) {clearTimeout()});
});

我想在用户在屏幕上移动手指时停止超时。问题是clearTimeout()不起作用,因为它没有链接到超时。我如何命名超时并快速清除它? 我使用正确的方法吗?

2 个答案:

答案 0 :(得分:5)

将“setTimeout()”的返回值保存在变量中,然后将该值传递给“clearTimeout()”以清除它。

$("a").live("click", function(e) {
    e.preventDefault();
    var t = setTimeout(function () {

               $.get(
                     "someOtherUrl",
                     {someVariable: "someValue"},
                     function(result) {
                     $(".result").html(render(result));
                     }
                     );

    }, 1000);
    $('a').live("touchmove", function(e) {clearTimeout(t);});
});

现在我的写作方式完全不同了;事实上,你在每次点击时都会添加一个冗余的“touchmove”处理程序。也许是这样的:

function setupAnchorClicks() {
  var timer = null;
  $("a").live("click", function(e) {
    e.preventDefault();

    timer = setTimeout(function() {
       // ...
    }, 1000);

  }).live("touchmove", function() {
    clearTimeout(timer);
  });
}

setupAnchorClicks();

答案 1 :(得分:1)

你必须保存从setTimeout收到的句柄(它是一个普通的整数),然后将它作为参数传递给clearTimeout。

var functionToCancel = function() {console.log("hello");}
var timeoutHandle = setTimeout(functionToCancel, 1000);
clearTimeout(timeoutHandle);