есть ли способ принудительно запускать событие только один раз для данного элемента (для каждого элемента, а не для всего документа) при использовании live ()?

#javascript #jquery

#javascript #jquery

Вопрос:

 $('div.myclass').live('click',function() {
    alert('i should respond only once');
});
  

Я знаю, что в jquery есть one() функция, но я не могу понять, как интегрировать это с приведенным выше кодом.

Комментарии:

1. Это один раз для каждого элемента или один раз для всего документа?

2. Было бы лучше иметь короткий значимый заголовок и задать вопрос, к которому он относится 😉

Ответ №1:

 $('div.myclass').live('click',function() {
   if($(this).attr('clicked') != 'yes')
   {
    alert('i should respond only once');
    $(this).attr('clicked', 'yes');
   }

});
  

Комментарии:

1. 1 Хотя это было бы намного лучше, если бы вы сделали $(this).data('clicked', true) и if ($(this).data('clicked')) { , а не использовали произвольные текстовые атрибуты.

Ответ №2:

В live() обработчике щелчков вы можете bind() вызвать событие непосредственно для элемента, который вызывает e.stopPropagation() . Таким образом, при следующем нажатии событие не сможет перейти к документу, где оно фактически запускает событие live.

Демонстрация: http://jsfiddle.net/kKHJm /

 $('li').live('click',function(){
    $(this).click(function(e){
        e.stopPropagation();
    });

    // Do stuff once here
});