Остановка функции тайм-аута

#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);