2012-06-21 18 views
5

quiero construir un evento personalizado con jQuery que no esté configurado en un elemento DOM.Cómo atrapar el jQuery.event.trigger()?

Se dice en la descripción de jQuery, que:

jQuery.event.trigger('test'); 

es para activar un evento personalizado.

¿Pero cómo puedo atraparlo?

THX de antemano

+0

¿Se refiere a la captura de 'trigger', o de ese evento personalizado? – raina77ow

+1

¿Te gusta? http://jsfiddle.net/6bWJ6/ – Blender

+0

me refiero a ese evento personalizado (lo siento si me expresé mal) .. – Moszeed

Respuesta

8

supongo que estás preguntando sobre ese evento personalizado (por lo menos que no tenía sentido para mí intentar coger el trigger): se hace con .bind:

$('some_selector').bind('test', function() { 
    console.log('Test was caught'); } 
); 

ACTUALIZACIÓN: Realmente no, no necesita un selector, solo un objeto para ser un 'host' de evento. Es posible usar algo como esto:

// taken from the comments at the Doc page 
var o = {length: 3}; 
$(o).bind('custom', function(){ console.log('hi') }); 
$(o).trigger('custom'); 

// Output 
hi 
hi 
hi 
+0

sí, pero ¿realmente necesito el selector? ... – Moszeed

+0

gracias, eso funciona para mí =) ... – Moszeed

+0

¿Cuál es el atributo de longitud? – Chris

0

debe pasar el elemento objetivo del evento a jQuery.event.trigger(), así:

jQuery.event.trigger('test', null, element); 

de manera que cuando se quiere atraparlo , puede utilizar:

$(element).on('test', fn); 

usted puede encontrar la definición y el uso de jQuery.event.trigger en la fuente de jQuery:

Después de leer el código fuente de jQuery, que iba a encontrar la definición de jQuery.event.trigger:

jQuery.event = { 
    ... 

    trigger: function(event, data, elem, onlyHandlers) {...} 

    ... 
} 

(esto no pretende ser una interfaz pública de jQuery y sólo para uso interno.)

y el uso:

jQuery.fn.extend({ 
... 
    trigger: function(type, data) { 
     return this.each(function() { 
      jQuery.event.trigger(type, data, this); 
     }); 
    }, 
    triggerHandler: function(type, data) { 
     var elem = this[0]; 
     if (elem) { 
      return jQuery.event.trigger(type, data, elem, true); 
     } 
    }, 
... 
}); 
0

Así es como:

$(document).bind('test', function (e) { 
    // handler code here... 
}); 
2

Creo que ustedes AR e echando en falta la pregunta. Él no está preguntando cómo escuchas un evento desencadenado en un objeto. Él pregunta cómo se escucha un evento desencadenado directamente a través de jQuery.event.trigger().

Encontré un artículo realmente bueno en http://www.sitepoint.com/jquery-custom-events/.

Esencialmente usted solo escucha en el documento objeto.

$(document).on("test", function(event, data) { 
    console.log(data) 
}); 

$.event.trigger('test', [{ foo: 'bar' }]); 
Cuestiones relacionadas