отключить обработчик событий клика на время - PullRequest
7 голосов
/ 01 декабря 2011

Я уже смотрел на подобные вопросы, но предоставленные ответы включают кнопки, а не элементы div.Когда я щелкаю элемент div с идентификатором click, обработчик события щелчка отключается unbind() и устанавливает таймер на 2 секунды.Через 2 секунды обработчик событий щелчка должен быть снова включен с помощью bind().Проблема в том, что обработчик события click, похоже, не получает «отскок».Я добавляю текст в другой элемент div, чтобы проверить, активен ли обработчик события click.

Вот мой jsfiddle:

jsfiddle

Ответы [ 5 ]

15 голосов
/ 01 декабря 2011

Другой подход ко всей проблеме состоит не в том, чтобы связываться с отменой привязки и повторной привязкой, а просто в использовании флага «отключен»:

$(document).ready(function(){

   var clickDisabled = false;
   $('#click').click(function(){
      if (clickDisabled)
         return;

      // do your real click processing here

      clickDisabled = true;
      setTimeout(function(){clickDisabled = false;}, 2000);
  });

});
1 голос
/ 01 декабря 2011

Когда вы повторно связываете функцию во второй раз, вы связываете только подмножество всего вашего кода - все, что он делает, выводит привязанный к статусу, но он не содержит никакого кода для выполнения тайм-аута во второй раз..

Также вам понравится функция .one().

Я исправил ваш код здесь: http://jsfiddle.net/eQUne/6/

function bindClick() {
    $('#click').one('click', function() {
        $('#status').append("bound ");
        setTimeout(bindClick, 2000);
    });
}

$(document).ready(function(){
    bindClick();
});
0 голосов
/ 01 декабря 2011

Я отвечаю на ваш вопрос, но не убиваю себя :)) Шучу ... Ваш код в порядке, просто опечатка: setTimeOut должно быть setTimeout (O должно быть o)

0 голосов
/ 01 декабря 2011

Если я правильно понял, что вы спрашивали, это должно сработать:

<div id="click" >time out</div>
<div id="status"></div>

$(document).ready(function() {
    $('#click').click(unbindme);

    $('#status').html('bound'); 

    function unbindme()
    {
        $('#click').unbind('click');
        $('#status').html('unbound');

        setTimeout(function(){
            alert('here');
            $('#status').html('bound'); 
            $('#click').click(unbindme);   
        }, 2000);
    }
}

Проверьте это здесь: http://jsfiddle.net/eQUne/

0 голосов
/ 01 декабря 2011

Попробуйте это:

$(document).ready(function(){

$('#click').click(function(){

    $('#click').unbind('click');
    $('#status').append("unbound ");

    setTimeout(
        function(){
            $('#click').bind('click',function(){

            });
            $('#status').append("bound ");           
        },
        2000
        );
    });
});

Вы неправильно написали setTimeout, и ваше «связанное» сообщение добавлялось только при нажатии.

...