Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выполнение события с последующей задержкой (https://javascript.ru/forum/events/20537-vypolnenie-sobytiya-s-posleduyushhejj-zaderzhkojj.html)

spider84 09.08.2011 02:53

Выполнение события с последующей задержкой
 
Здраствуйте!

Допустим у меня есть какойто элемент (кнопка, ссылка, изображение) с привязаным к нему событием функцией срабатывающией по щелчку мыши или нажатием клавиши на клавитуре.

Мне нужно чтобы после срабатывания события оно отключалось на некоторое время(например на 3 секунды), для избежания повторного срабатывания.
Как это реализовать? Правильно ли понимаю что нужно копать в сторону таймеров?


Заранее спасибо за помощь!

devote 09.08.2011 03:26

для избежания повторного срабатывания таймеры тебе не помогут, используй флаги.
например:
$("#my_div").click(function(){
  if ( !$( this ).attr( 'busy' ) ) {
    $( this ).attr( 'busy', true );
    // ....... обрабатываем много кода.
    $( this ).removeAttr( 'busy' );
  }
});

spider84 09.08.2011 03:57

Спасибо devote!
А как задержать поввторное срабатывание на определенное время?

devote 09.08.2011 04:55

Цитата:

Сообщение от spider84
А как задержать поввторное срабатывание на определенное время?

Освободи элемент от события а когда надо вновь привяжи.
А можно и так:
$("#my_div").click(function(){
  if ( !$( this ).attr( 'busy' ) ) {
    $( this ).attr( 'busy', true );
    // ....... обрабатываем много кода.
    setTimeout(function(){
       $( "#my_div" ).removeAttr( 'busy' );
    }, 3000); // Задержка на три секунды
  }
});

melky 09.08.2011 09:41

лучше ставить числа - их проверять проще

$("#my_div").click(function(){
  if ( !$( this ).attr( 'busy' ) ) {
    $( this ).attr( 'busy', *!*'1'*/!* );
    // ....... обрабатываем много кода.
    setTimeout(function(){
       $( "#my_div" ).removeAttr( 'busy' );
    }, 3000); // Задержка на три секунды
  }
});


а то получится строка "true" в атрибуте .. или "false", а они , как известно , Boolean("false") === true


Часовой пояс GMT +3, время: 09:38.