Domanda

Supponendo che ci sono un gran numero di elementi in tutto il sito che hanno un numero sconosciuto e il tipo di eventi legati a loro.

Se ho bisogno di ignorare tutti questi eventi con un unico evento legato, e solo questo evento sarà il fuoco, quali sono alcune raccomandazioni?

Vorrei essere vincolante l'evento a un gestore di eventi click, e sto usando jQuery.

Grazie in anticipo.

È stato utile?

Soluzione

Siete alla ricerca di jQuery#unbind .

Per rimuovere tutti i gestori di eventi su un elemento o un insieme di elementi, basta fare:

$('.some-selector').unbind();

Per separare solo click i gestori, l'uso unbind('click'):

$('.some-selector').unbind('click');

Per separare tutti i gestori di click e subito legano il proprio gestore, dopo di che, si può fare qualcosa di simile a questo:

$('.some-selector').unbind('click').click(function(event) {
  // Your code goes here
});

Si noti che questo sarà solo il lavoro per gli eventi legati utilizzando jQuery (utilizzando .bind o qualsiasi altro metodo jQuery che usi .bind internamente). Se si desidera rimuovere tutti i possibili eventi onclick da un dato insieme di elementi, è possibile utilizzare:

$('.some-selector')
  .unbind('click') // takes care of jQuery-bound click events
  .attr('onclick', '') // clears `onclick` attributes in the HTML
  .each(function() { // reset `onclick` event handlers
    this.onclick = null;
  });

Altri suggerimenti

Vorrei fornire un pensiero senza rimuovere tutti gli eventi tutti insieme (semplicemente ignorare).

Se il vostro nuovo singolo evento legato (noi lo chiamiamo "click" qui) è specifico per l'elemento si lega a, allora credo che si può ignorare qualsiasi altro evento semplicemente stopPropagation la funzione (). Ti piace questa

$("specific-selector").on("click", ".specific-class", function (e) {
  e.stopPropagation()
  // e.stopImmediatePropagation()
  /* your code continues ... */
});

Si fermerà eventi bolle su, in modo che le altre manifestazioni non scatta. uso stopImmediatePropagation () per impedire ad altri eventi collegati sugli stessi elementi come "click" fa.

Per esempio, se "mouseLeave" evento è anche legarsi a $ ( "specifica selettore .specific-class") elemento, non sarà il fuoco, troppo.

Infine, tutti gli altri eventi non sarà il fuoco su questo elemento, ma il nuovo "click" elemento.

La questione irrisolta è, che cosa se altri eventi anche usare stopPropagation ()? ... Poi penso quello con migliore vince specifica, in modo da cercare di evitare complesse, troppi eventi è ultimo suggerimento.

Si può vedere "diretti ed eventi delegati" a jQuery sito per ulteriori informazioni.

Sembra che questo è abbastanza semplice in realtà:

$('#foo').unbind('click');
$('#foo').bind('click', myNewFunction);

Grazie per le vostre risposte però.

Prova ad utilizzare vivo invece di bind. Allora si può facilmente rimuovere vivo legame con morire dal selettore che è un funzionamento rapido ed impostare un altro vivo altrettanto veloce.

   $('selection here').live('..', .....);  // multiple invocations
   $('selection here').die();
   $('selection here').live('click',.....);

DOM non viene toccato affatto. condizione di evento viene valutato al verificarsi dell'evento.

Ma in generale, se si desidera solo per funzioni di gestione di scambio perché non farlo in questo modo:

var ahandler = function(evt) { /* first implementation */ }
$('.selector').bind('click', function(evt) { ahandler(evt); });

//and then if you want to change handlers
ahandler = function(evt) { /* new implementation */ };

Questo dà assolutamente nessun costo di eventuali modifiche, rebinding etc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top