JQuery mousdown с бесконечным setInterval

Мой вопрос касается этого вопроса.

На данный момент я использую этот ответ, но я все еще могу обмануть этот код, поэтому clearInterval не остановится. Удерживая левую кнопку мыши, я просто нажимаю правую, чтобы открыть контекстное меню. Теперь clearInterval не вызывали.

Если я добавлю событие contextmenu к clicker, с clearInterval оно будет вызвано, но не очистит интервал.

Посмотреть эту демонстрацию


person Steckdoserich    schedule 30.03.2016    source источник


Ответы (1)


Добавьте clearInterval() к событию mousedown:

clicker.mousedown(function() {
  clearInterval(timeout);
  timeout = setInterval(function() {
    clicker.text(count++);
  }, 500);

  return false;
});

Это будет вызвано в контекстном меню и предотвратит одновременный запуск нескольких таймеров.

Скрипка

person Rick Hitchcock    schedule 30.03.2016
comment
Черт, это явно лучшее решение, чем пришло мне в голову. Но я оставлю здесь важную часть своего ответа: установка setInterval в var сохраняет только идентифицирующую запись, а не сам интервал. - person DBS; 30.03.2016
comment
Я подумал, что ваш ответ был в порядке, и был удивлен, увидев, что он удален. Хорошая мысль о настройке setInterval ... - person Rick Hitchcock; 30.03.2016
comment
Я уже пытался написать комментарий в ответ @DBS, потому что я все еще мог обманывать с быстрыми кликами. Думаю, это было вызвано фактом множественного доступа к одной переменной. На данный момент я не могу обмануть тебя (@RickHitchcock) ;) - person Steckdoserich; 30.03.2016