在此代码停止超时功能

问题描述:

在此代码停止超时功能

$("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()不起作用,因为它没有链接到超时。我将如何命名超时并快速清除? 我使用正确的方法吗?

将“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(); 

你必须拯救的setTimeout(这是一个普通的整数)收到的手柄,然后将它传递给clearTimeout作为参数。

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