2013-06-03 13 views
8

Chcę wywołać niestandardowe zdarzenie jQuery obiektu. Wiem, że możemy użyć funkcji return false lub stopPropagation, aby zapobiec bulgotaniu. Co chcę wiedzieć, czy mogę wyzwolić niestandardowe zdarzenie i określić, że domyślnie nie bańka.Wywoływanie niestandardowego zdarzenia jQuery bez propagacji

Jest to kod mam teraz

 $(".abc").on("change", function() { 
      var e = new $.Event("datachange"); 
      $(this).trigger(e) 
     }); 

Powyższy wyzwala zdarzenie dataChange na #abc i pęcherzyki zdarzenie całą drogę w górę. Nie chcę tego. Osiągam to, używając następujących rzeczy.

 $(".abc").on("change", function() { 
      var e = new $.Event("datachange"); 
      //e.stopPropagation(); this does not work 
      $(this).trigger(e) 
     }).on("datachange", function (e) { 
      e.stopPropagation(); 
      return false; 
     }); 

Przeczytałem, że triggerHandler robi coś podobnego, ale tylko dla pierwszego pasującego elementu.

Czy jest lepszy sposób na osiągnięcie tego?

+0

Co jest złego w 'e.stopPropagation()' w twojej procedurze obsługi zdarzeń? – crush

+0

@crush Jest możliwe, że nie ma żadnych procedur obsługi zdarzeń, a zdarzenie zakończyłoby się bulgotaniem i zostało uwięzione przez program obsługi nie przeznaczony dla tego obiektu. – Arun

Odpowiedz

12

Masz rację, że triggerHandler() dotyczy tylko pierwszego elementu zestawu, ale nie powinno to stanowić problemu, ponieważ zestaw, który kompilujesz z $(this) zawiera tylko jeden element.

Dlatego można bezpiecznie pisać:

$(".abc").on("change", function() { 
    $(this).triggerHandler("datachange"); 
}); 

ten sposób, zdarzenie datachange nie będzie się bąbel drzewo dokumentu.

Powiązane problemy