2011-11-11 15 views
7

jQuery tiene funciones como .on() y .trigger() que le permiten adjuntar eventos a objetos DOM y luego activar manualmente esos eventos. La documentación para estas funciones se refiere específicamente a eventos en "elementos", que entiendo significan elementos HTML/DOM.¿Puedo usar las funciones de eventos de jQuery con objetos antiguos simples?

¿También puedo utilizar estas funciones para agregar funcionalidad de eventos a objetos simples de JavaScript antiguos?

var x = {}; 
$(x).on('bonk', function() { alert('Oif!'); }); 
$(x).trigger('bonk'); // shows the alert 

Esto funciona en todos los navegadores que he probado en (Chrome 15, Firefox 7, IE 9 y Opera 11.52, todos en Windows), que parece prometedor. Pero de la documentación no queda claro si en realidad significa como escenario admitido, en todos los navegadores, en todas las plataformas. La elección de terminología de los documentos ("elementos") arroja muchas dudas.

El docs hacer estado que puedo hacer mis propios nombres de eventos (por ejemplo, la página doc para .on() tiene un ejemplo de "Adjuntar y desencadenar personalizada (no-navegador) eventos"). Pero aún así, eso siempre asocia el evento a un elemento DOM, no a un objeto antiguo simple.

¿Hay algo que establezca definitivamente si jQuery admite .on() y .trigger() con objetos simples de JavaScript?

+0

aseado. Eso es todo lo que tengo que decir por ahora. No sé la respuesta, pero gracias por la interesante pregunta. –

+0

+1 ¡Gran pregunta! – dSquared

+0

He utilizado este enfoque con objetos que no son DOM para una aplicación MVC con evented, y parecía funcionar en varios navegadores (incluido IE8). Pero no tengo documentación para respaldar eso. – nrabinowitz

Respuesta

2

Mirando el código fuente He encontrado algunos indicios de que es la intención, pero entonces yo también encontré esto:

ninguna razón particular por la que no está documentado (aparte de que es lugar no tradicional para la mayoría de los usuarios) - pero sí, lo apoyamos y tenemos pruebas unitarias para él.

http://forum.jquery.com/topic/triggering-custom-events-on-js-objects

Cuestiones relacionadas