working trigger not evento event disparar change jquery events click propagation

trigger - simulate click button jquery



jQuery: ¿Atrapa todos los eventos de clics antes de que sucedan? (2)

Podría capturar todos los eventos de clics y luego desencadenar un evento personalizado donde sus oyentes estarán vinculados después de su verificación

$("#someDiv").bind(''awesomeEvent'', function() { //do stuff here } $(*).click(function() { if(canClick) { $(this).trigger(''awesomeEvent''); } }

EDITAR Debería mencionar que usar el selector $ (*) no es una buena idea desde el punto de vista del rendimiento. Deberías tratar de reducir el alcance de alguna manera.

En mi página tengo muchos elementos que responden a los eventos de clic. Hay ocasiones en las que necesito bloquear todos los clics en función de algún indicador global. ¿Hay alguna forma de realizar esta comprobación en una ubicación centralizada?

Ahora mismo, en cada evento, compruebo la bandera, por ejemplo:

var canClick = false; // Global flag // Sample click event: $("#someDiv").click(function(){ if(!canClick) return; // Some stuff ... });

Lo que me gustaría hacer es tener un elemento que atrape todos los eventos de clics antes que cualquier otro elemento.

Intenté hacerlo en el documento, pero estos eventos solo ocurren después de los otros eventos de clic.

Ejemplo:

$("#someDiv").click(function(){ console.log("someDiv click"); }); $(document).click(function(){ console.log("Document click"); }); // When I click on the someDiv element it prints: > someDiv click > Document click

También intenté poner una división de pantalla completa encima de todo y usar esto para atrapar eventos, pero el problema era que ninguno de los clics se propagaba a través de esta división de pantalla completa. Además, no quiero confiar en la creación de elementos adicionales para atrapar clics, ya que se siente un poco pirateado.

¿Podría tal vez sobrescribir la función de clic de jQuery para poder poner mi pequeño cheque allí?

¿Hay algo obvio que me estoy perdiendo aquí?

Gracias por cualquier ayuda.


Sí, use .addEventListener () y establezca la tercera opción en verdadero . Esto vinculará al oyente con la fase de captura y ejecutará la función antes de que se ejecute cualquier otra cosa.

Aquí hay un ejemplo donde esto detendrá la ejecución de todos los controladores de clic:

document.addEventListener(''click'', function(e) { e.stopPropagation(); }, true);

Véalo en acción aquí:

http://jsfiddle.net/wLwMh/1/