2011-10-02 71 views
1

在此代碼停止超時功能

$("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()不起作用,因爲它沒有鏈接到超時。我將如何命名超時並快速清除? 我使用正確的方法嗎?

回答

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

你必須拯救的setTimeout(這是一個普通的整數)收到的手柄,然後將它傳遞給clearTimeout作爲參數。

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