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