Me gustaría pensar en ello sin eliminar todos los eventos (solo anularlos).
Si su nuevo evento único vinculado (lo llamamos "clic" aquí) es específico del elemento al que se une, entonces creo que puede ignorar cualquier otro evento simplemente mediante la función stopPropagation(). Como este
$("specific-selector").on("click", ".specific-class", function (e) {
e.stopPropagation()
// e.stopImmediatePropagation()
/* your code continues ... */
});
Detendrá los eventos burbujas, así que tus otros eventos no se dispararán. utilice stopImmediatePropagation() para evitar que otros eventos se unan a los mismos elementos como lo hace "click".
Por ejemplo, si el evento "mouseleave" también se une al elemento $ ("specific-selector .specific-class"), no se activará también.
Por último, todos los demás eventos no se activarán en este elemento, pero su nuevo elemento "clic".
La pregunta no resuelta es, ¿qué pasa si otros eventos también usan stopPropagation()? ... Entonces creo que gana el que tenga la mejor especificación, así que trate de evitar eventos complejos, demasiados es la sugerencia final.
Puede ver "Eventos directos y delegados" en jQuery site para obtener más información.
¿Quiere decir sin realmente desvincular los controladores de eventos originales? – user113716
Ugh; esto suena como una muy mala idea. Sin embargo, sospecho que puede hacerlo averiguando el mecanismo jQuery interno y subvirtiéndolo con su propio código. – Pointy
@patrick dw - Desvincular todos los manejadores de evento click originales está bien, siempre que eso no requiera identificar el evento exacto que está asociado con el clic. Si hay una forma de "desvincular todos los eventos de clic" y luego "enlazar este evento de clic específico e invaluable", entonces eso estaría bien. – jerome