#javascript
#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() не работает, потому что она не связана с тайм-аутом. Как бы я назвал тайм-аут и быстро его очистил?
Я использую правильный метод?
Ответ №1:
Сохраните возвращаемое значение из «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();
Ответ №2:
Вам нужно будет сохранить дескриптор, полученный из setTimeout (это простое целое число), а затем передать его в clearTimeout в качестве аргумента.
var functionToCancel = function() {console.log("hello");}
var timeoutHandle = setTimeout(functionToCancel, 1000);
clearTimeout(timeoutHandle);