event delegate change jquery event-handling

delegate - jquery on change



Cómo sobrescribir los controladores de eventos jquery (5)

A partir de jQuery 1.7, deberías estar off para eliminar los controladores de eventos y continuar para agregarlos, aunque aún puedes usar la abreviatura de click .

$(''#clickme'').off(''click'').on(''click'', fireclick); $(''#clickme'').off().on(''click'', fireclick);

Respuesta original:

Si desea reemplazar todos los manejadores de clics, unbind llamada primero sin un argumento de función. Si desea reemplazar todos los controladores de eventos, no especifique el tipo de evento.

$(''#clickme'').unbind(''click'').click(fireclick); $(''#clickme'').unbind().click(fireclick);

Trataré de explicar el problema con un código simple.

var fireClick = function() { alert(''Wuala!!!'') }; $(''#clickme'').click(fireclick); $(''#clickme'').click(fireclick);

Así que ahora obviamente alertará 2 veces, pero lo necesito solo una vez. Intentó muchas maneras, pero no dio resultado.

Gracias.


Deberías usar setInterval. El problema es que no puede hacer que aparezcan dos alertas al mismo tiempo. Primero uno tiene que cerrar primero o el segundo no puede aparecer en la pantalla ...


Puede usar la función jQuery unbind para eliminar el primer evento:

var fireClick = function() { alert(''Wuala!!!'') }; $(''#clickme'').click(fireclick); $(''#clickme'').unbind(''click'', fireClick); // fireClick won''t fire anymore... $(''#clickme'').click(fireclick); // ...but now it will


Use un espacio de nombres para asegurarse de no eliminar ningún otro oyente:

$(''#clickme'').off(''click.XXX'').on(''click.XXX'', fireclick);

Siempre que ningún otro código use XXX , puede estar seguro de que no ha estropeado ningún otro comportamiento del que no estaba enterado.


Yo trataría de eliminar las llamadas adicionales, pero no creo que puedas llamar a ambas cosas cada vez:

$(''#clickme'').unbind(''click'', fireclick); $(''#clickme'').click(fireclick);