2013-06-03 15 views
8

Voglio attivare un evento jQuery personalizzato non bubblable su un oggetto. So che possiamo usare return false o stopPropagation per prevenire il bubbling. Quello che voglio sapere è che posso attivare un evento personalizzato e specificare che per impostazione predefinita non bolle.Attivazione di un evento jQuery personalizzato senza bolle

Questo è il codice che ho adesso

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

È possibile che attiva l'evento DataChange su #abc e bolle l'evento tutta la strada fino. Non lo voglio Posso farlo usando il seguente.

 $(".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; 
     }); 

Ho letto che triggerHandler fa qualcosa di simile, ma solo per il primo elemento di corrispondenza.

C'è un modo migliore per raggiungere questo obiettivo?

+0

Cosa c'è di male in 'e.stopPropagation()' nel gestore di eventi? – crush

+0

@crush È possibile che non ci siano gestori di eventi e che l'evento finisca per ribollire e rimanere intrappolato da un gestore non pensato per quell'oggetto. – Arun

risposta

12

Hai ragione che lo triggerHandler() si applica solo al primo elemento dell'insieme, ma non dovrebbe essere un problema perché il set che hai creato con $(this) contiene solo un elemento.

Pertanto, si può tranquillamente scrivere:

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

In questo modo, il datachange evento non sarà bolla del documento.

Problemi correlati