Pregunta

Si se asume que hay un gran número de elementos a lo largo del sitio que tiene un número desconocido y tipo de eventos ligados a ellos.

Si necesito para anular todos estos eventos con un evento único límite, y sólo ese evento se disparará, ¿cuáles son algunas recomendaciones?

Me sería vinculante para el evento a un controlador de eventos click, y estoy usando jQuery.

Gracias de antemano.

¿Fue útil?

Solución

jQuery#unbind .

Para eliminar todos los controladores de eventos en un elemento o un conjunto de elementos, acaba de hacer:

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

Para desvincular única clic manipuladores, el uso unbind('click'):

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

Para separar todos los manipuladores de clic y de inmediato se unen a su propio manejador después de eso, se puede hacer algo como esto:

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

Tenga en cuenta que esto sólo funcionará para eventos obligado usando jQuery (usando .bind o cualquier otro método de jQuery que utiliza .bind internamente). Si desea eliminar todos los posibles eventos onclick de un conjunto dado de elementos, se puede usar:

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

Otros consejos

Me gustaría ofrecer un pensamiento sin la eliminación de todos los eventos todos juntos (solo anularlos).

Si su nuevo evento de salto individual (lo llamamos "clic" aquí) es específico para el elemento que se une a, entonces creo que puede pasar por alto cualquier otro evento simplemente por la función () stopPropagation. Como esto

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

Se detendrá eventos burbujas hacia arriba, por lo que sus otros eventos no se disparará. uso stopImmediatePropagation () para evitar otros eventos adjuntos en los mismos elementos que "clic" lo hace.

Por ejemplo, si "MouseLeave" evento también se unen a $ ( "selector específica .specific de clase") elemento, no lo hará fuego, también.

En el último, todos los demás eventos no se disparará en este elemento, pero su nuevo "clic" elemento.

La pregunta sin resolver es, ¿y si otros eventos también utilizan stopPropagation ()? ... Entonces creo que el que tiene mejores victorias de especificaciones, a fin de tratar de evitar complejos, demasiados eventos se sugerencia final.

Se puede ver "directos y eventos delegados" en jQuery sitio para más información.

Parece que este es en realidad bastante simple:

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

Gracias por sus respuestas sin embargo.

Trate de usar vivo en lugar de bind. A continuación, puede eliminar fácilmente en vivo vinculante con morir del selector que es una operación rápida y establecer otro vivo igual de rápido.

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

DOM no se toca en absoluto. condición de evento se evalúa sobre la ocurrencia de eventos.

Pero en general, si lo que desea es funciones de controlador de intercambio por qué no hacerlo de esta manera:

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 */ };

Esto da absolutamente ningún costo de cualquier cambio, rebinding etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top