Cómo acceder al evento jQuery sin usar el parámetro de callback anónimo

Normalmente, cuando necesite acceder a un evento, lo hace a través del parámetro especificado en la function de callback:

$button.live("click", function(ev) { // do something with ev here, like check 'ev.target' } 

Pero en su lugar (por razones demasiado complicadas para entrar aquí), no quiero usar una function de callback anónima, sino que especifico una function para llamar, como esta:

 $button.live("click", functionToCall(ev, $(this)); 

Entonces notará que incluí 'ev' como parámetro para functionToCall (), pero obviamente esto no funcionará porque no estoy usando la function de callback anónima. Pero aún necesito acceder a ese evento de clic (para verificar ev.target) dentro de functionToCall (). Mi pregunta es, ¿cómo puedo acceder a este evento? Sería bueno si pudiera hacer algo como esto:

 $button.live("click", functionToCall($(this)); 

y

 function functionToCall($item) { var target = $item.event("click").target; // do something with target } 

Cualquier idea sería muy apreciada. Gracias.

Respuesta original

 function test(eve) { alert(eve.type); alert(this); //$(this) if you need it as jQuery object } $([yourselector]).live("click", test); 

Automáticamente obtendrá el evento en el parámetro eve .


Responder a la pregunta extendida en el comentario

Pasar un parámetro lo hace un poco más difícil. Si necesita una explicación por qué lo hice así: Pregunte.

 function helper(customparam) { return function(eve, selector) { actualFunction(eve, selector, customparam, this) }; } function actualFunction(eve, selector, customparam, self) { alert(eve.type); alert(selector); alert(customparam); alert(self); //self is now the element we clicked on //$(self) if you need it as jQuery object //using this won't work anymore as this is now window } $([yourselector]).live("click", helper([yourparameter])); 

Puede llamar a una function dentro de la function de callback anónima:

 $button.live("click", function(ev) { functionToCall(ev, $(this)); } 

EDITAR : Creo que esto es lo que estás buscando hacer (no probado):

 function handleClick(ev) { $(this).die("click"); // ...whatever processing to do... $(this).live("click", handleClick); } $button.live("click", handleClick); 

Creo que $ (esto) se referirá al object del button en el que se llamó a la function.

Recuerde que jQuery vuelve a asignar this cuando llama a los manejadores de events, usando la llamada o aplicación de methods de function. Entonces, cuando se invoca functionToCall , this es el elemento DOM del button $.

 var functionToCall(ev) { var $this = $(this); $this.die("click", functionToCall); // stuff $this.live("click", functionToCall); } $button.live("click", functionToCall); 
 var mythis = $(this); var callback = function(ev) { var target = mythis.event("click").target; } $button.live("click", callback);