Подтвердить что ты не робот

Использование .one() с .live() jQuery

Я использовал функцию live():

$('a.remove_item').live('click',function(e) {});

Мне нужно было изменить это на one(), чтобы предотвратить несколько кликов, однако, когда я вставляю один из этих элементов после загрузки страницы, прослушиватель one() не запускается.

Как я могу заставить one() вести себя как live()?

4b9b3361

Ответ 1

Попробуйте следующее:

$('a.remove_item').live('click',function(e) {
  if($(e.target).data('oneclicked')!='yes')
  {
    //Your code
  }
  $(e.target).data('oneclicked','yes');
});

Выполняет ваш код, но он также устанавливает флаг "oneclicked" как "да", чтобы он не активировался снова. В основном просто устанавливает параметр, чтобы остановить его от активации после его однократного нажатия.

Ответ 2

Здесь версия плагина для запуска обработчика .live(), созданного исключительно из-за скуки:

$.fn.liveAndLetDie = function(event, callback) {
    var sel = this.selector;
    function unbind() { $(sel).die(event, callback).die(event, unbind); }
    return this.live(event, callback).live(event, unbind);
};

Он работает так же, как .live() (если вам не нужен аргумент данных события, в этом случае вам нужно будет добавить перегрузку). Просто используйте его так же:

$('a.remove_item').liveAndLetDie('click', function(e) { /* do stuff */ });

Вы можете проверить это здесь.

Ответ 3

Просто используйте jQuery .die() method в обработчике:

Пример: http://jsfiddle.net/Agzar/

$('a.remove_item').live('click',function(e) {
    alert('clicked');
   $('a.remove_item').die('click'); // This removes the .live() functionality
});​

EDIT:

Или, если вы хотите отключить событие только для каждого элемента, вы можете просто изменить имя класса, так как live() является селекторным.

Пример: http://jsfiddle.net/Agzar/1/

$('a.remove_item').live('click',function(e) {
    alert('i was clicked');
    $(this).toggleClass('remove_item remove_item_clicked');
});​

Это изменило класс от remove_item до remove_item_clicked, который может иметь одинаковый стиль. Теперь live() не будет срабатывать после первого щелчка.

Ответ 4

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

$('a.remove_item').live('click', function(e) {
    if(!$(this).hasClass('clicked'))
    {
      $(this).addClass('clicked');
      alert("dd"); // this is clicked once, do something here
    }
});​

Ответ 5

Я знаю, что это старый пост, но это сработало для меня в аналогичном случае:

$('a.remove_item').live('click', function(e) {
    e.stopPropagation();
    // Your code here
});​

Ответ 6

Я использую его для функции $.ajax, поэтому в финале, в моем случае не удается, я использую 500, чтобы отложить его и перестать повторять много раз.

}).fail(function(response, status){ alert("FAILED: "+JSON.stringify(response, null, 4)); },500);

Надеюсь, это поможет вам!