Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

78
Vistas
Anule todos los eventos de JavaScript vinculados a un elemento con un solo evento nuevo

Suponiendo que hay una gran cantidad de elementos en todo el sitio que tienen un número desconocido y un tipo de eventos vinculados a ellos.

Si necesito anular todos estos eventos con un solo evento vinculado y solo se activará ese evento, ¿cuáles son algunas recomendaciones?

Estaría vinculando el evento a un controlador de eventos de clic, y estoy usando jQuery.

Gracias por adelantado.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Estás buscando jQuery#unbind .

Para eliminar todos los controladores de eventos en un elemento o conjunto de elementos, simplemente haga lo siguiente:

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

Para desvincular solo los controladores de clic, use unbind('click') :

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

Para desvincular todos los controladores de clics e inmediatamente vincular su propio controlador después de eso, puede hacer algo como esto:

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

Tenga en cuenta que esto solo funcionará para eventos enlazados con jQuery (usando .bind o cualquier método jQuery que use .bind internamente). Si desea eliminar todos los eventos onclick posibles de un conjunto de elementos dado, 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; });
over 4 years ago · Santiago Trujillo Denunciar

0

Me gustaría proporcionar una idea sin eliminar todos los eventos juntos (simplemente anularlos).

Si su nuevo evento de enlace único (lo llamamos "clic" aquí) es específico del elemento al que se enlaza, entonces creo que puede ignorar cualquier otro evento simplemente con la función stopPropagation(). Me gusta esto

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

Detendrá las burbujas de eventos, por lo que sus otros eventos no se activarán. use stopImmediatePropagation() para evitar que otros eventos se adjunten a los mismos elementos que "clic".

Por ejemplo, si el evento "mouseeleave" también está vinculado al elemento $("specific-selector .specific-class"), tampoco se activará.

Por fin, todos los demás eventos no se activarán en este elemento sino en su nuevo elemento de "clic".

La pregunta sin resolver es, ¿qué pasa si otros eventos también usan stopPropagation()? ... Entonces creo que gana el que tiene la mejor especificación, así que trate de evitar eventos complejos, demasiados es la sugerencia final.

Puede ver "Eventos directos y delegados" en el sitio de jQuery para obtener más información.

over 4 years ago · Santiago Trujillo Denunciar

0

Intenta usar live en lugar de bind . Luego, puede eliminar fácilmente la unión en vivo con el troquel del selector, que es una operación rápida, y configurar otra en vivo igualmente rápida.

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

DOM no se toca en absoluto. La condición del evento se evalúa cuando ocurre el evento.

Pero, en general, si solo desea intercambiar funciones de controlador, ¿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, reencuadernación, etc.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda