在此代码停止超时功能
问题描述:
$("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);