2010-02-09 20 views
33

¿Cómo puedo saber en mi código de activación que se ha llamado al preventDefault?jQuery: ¿Cómo uso event.preventDefault() con eventos personalizados?

$(document).trigger('customEvent', params); 
if (/* ??? */) 
    doDefaultActions(); 
+1

si se trata de un evento personalizado .. hay no debe haber ninguna acción predeterminada. –

+1

Todavía es algo que puede usar en su mecanismo de evento si el controlador también se usa para eventos no personalizados. –

+0

Si su evento personalizado es realmente personalizado, ¿qué intenta evitar? Normalmente preventDefault se usa para que el navegador no haga lo normal. El navegador en sí no conoce ni se preocupa por los eventos personalizados. –

Respuesta

45

gatillo() también puede tener un objeto de evento, por lo que si se puede crear un objeto de evento, así:

var event = jQuery.Event("customEvent"); 
$(document).trigger(event); 

entonces usted puede comprobar después de que el gatillo para ver Si preventDefault() se ha llamado así: eventos

var prevented = event.isDefaultPrevented(); 
+0

Wow eso es genial. ¡Aprende algo todos los días! – Pointy

+3

Sí, lo aprendí hoy al buscarlo en la API de jQuery. ¡Entonces todos aprendemos hoy! –

+0

Eso no parece estar documentado (en api.jquery.com al menos) - bueno, no puedo encontrarlo de todos modos. Los documentos están un poco mejor ahora, pero aún me gustaría que sean una wiki. [edit: ok, ahora lo veo en la fuente !!] – Pointy

0

Que yo sepa el "preventDefault()" llamada se trata de evitar las respuestas navegador nativo a cosas como los clics en las etiquetas de anclaje o las pulsaciones de teclas en los campos de texto. Una vez que el ciclo de manejo de eventos ha terminado, se termina. Para los eventos inventados, no creo que tenga ningún efecto, ya que se trata del sistema de procesamiento de eventos jQuery y no de la funcionalidad nativa del navegador.

Su código podría establecer algún tipo de bandera en algún lugar con el fin de comunicarse con el "mundo exterior".

[ooh] podría intentar que el controlador esconda una referencia al objeto del evento en algún lugar que el código externo pueda encontrar, y luego verifique externamente con "isDefaultPrevented()". No sé si eso funcionaría sin embargo.

1

personalizadas no tienen algunas acciones predeterminadas que pasa .. (que son por encargo).

Por otro lado, si desea detener el efecto de burbujeo de este evento a los demás a continuación, echar un vistazo a triggerHandler que no se propaga hacia arriba de la jerarquía ..

Cuestiones relacionadas