No encuentro ningún buen recurso sobre cómo se implementan los eventos personalizados en jquery. Al igual que la forma en que simulan el burbujeo de eventos, etc.¿Cómo funcionan exactamente los eventos de jQuery Custom?
8
A
Respuesta
7
esta manera:
// bubbling is internal
trigger: function(event, data, elem /*, bubbling */) {
// Event object or event type
var type = event.type || event,
bubbling = arguments[3];
// Handle a global trigger
if (!elem) {
// Don't bubble custom events when global (to avoid too much overhead)
event.stopPropagation();
// Only trigger if we've ever bound an event for it
if (jQuery.event.global[ type ]) {
jQuery.each(jQuery.cache, function() {
if (this.events && this.events[type]) {
jQuery.event.trigger(event, data, this.handle.elem);
}
});
}
}
// ... snip ...
// Trigger the event, it is assumed that "handle" is a function
var handle = elem.nodeType ?
jQuery.data(elem, "handle") :
(jQuery.data(elem, "__events__") || {}).handle;
if (handle) {
handle.apply(elem, data);
}
var parent = elem.parentNode || elem.ownerDocument;
// ... snip ....
if (!event.isPropagationStopped() && parent) {
jQuery.event.trigger(event, data, parent, true);
} else if (!event.isDefaultPrevented()) {
// ... snip ...
jQuery.event.triggered = true;
target[ targetType ]();
}
}
lo que está pasando aquí es el siguiente :
Cuando trigger
se llama jQuery comprueba si el evento se desencadena globalmente ($.trigger("event_name");
).
Si es no se dispare a nivel mundial, y la propagación no se ha dejado de y el elemento en cuestión tiene un elemento padre (!event.isPropagationStopped() && parent
) entonces jQuery llama al evento de disparo manualmente en el elemento padre.
jQuery.event.trigger(event, data, parent, true);
Hay un poco más en juego - ver event.js en el código fuente de jQuery.
1
Mira la tutorials
$(document).bind("eventType", ...);
// This is equivalent to the plugin's $.subscribe("eventType", ...);
$(document).trigger("eventType");
// equivalent to plugin's $.publish("eventType");
también comprobación este SO question
Cuestiones relacionadas
- 1. ¿Cómo funcionan exactamente los ejecutables?
- 2. ¿Cómo funcionan los oyentes de eventos?
- 3. ¿Cómo funcionan exactamente los sinónimos de tipo?
- 4. ¿Cómo funcionan los eventos débiles?
- 5. ¿Cómo funcionan los eventos en Java Swing?
- 6. ¿Cómo funcionan los eventos virtuales en C#?
- 7. ¿Cómo funcionan exactamente los registros de Google App Engine?
- 8. ¿Cómo funcionan estos fragmentos de código exactamente?
- 9. ¿Cómo funcionan exactamente los objetos Shadow personalizados en Robolectric?
- 10. Múltiples archivos fuente en C- ¿Cómo funcionan exactamente los makefiles?
- 11. ¿Cómo funcionan exactamente MbUnit [Parallelizable] y DegreeOfParallelism?
- 12. ¿Cómo funcionan realmente los eventos enviados por el servidor?
- 13. jquery mobile custom css?
- 14. Javascript ¿Los eventos no funcionan en Tablet-pc?
- 15. ¿Cómo funcionan los greenlets?
- 16. Los eventos de JQuery no funcionan con ASP.NET MVC Vistas parciales
- 17. ¿Cuándo exactamente se ejecutan los eventos en C#?
- 18. ¿Cómo funcionan exactamente las propiedades adjuntas en WPF?
- 19. Custom NSView en NSMenuItem que no recibe eventos de mouse
- 20. ¿Por qué los eventos de Backbone al reemplazar html no funcionan?
- 21. JavaScript Custom Listener de evento
- 22. Cómo usar jQuery ¿Diferido con eventos personalizados?
- 23. Cómo eliminar todos los controladores de eventos Click en Jquery
- 24. ¿Qué objeto devuelve jquery exactamente?
- 25. Los manejadores de eventos de Jquery devuelven los valores
- 26. Eventos de Phonegap que no funcionan en iphone
- 27. ¿Cómo funcionan las transiciones JQuery Nivo Slider?
- 28. ¿Cómo funcionan los Suffix Trees?
- 29. ¿Cómo funcionan los destructores virtuales?
- 30. ¿Cómo funcionan los perfiladores .NET?
Creo que no quería una explicación API, sino una explicación técnica sobre cómo funcionan realmente. – ThiefMaster
@ThiefMaster Si ese es el caso, la mejor forma de aprender es mirar la fuente :) http://james.padolsey.com/jquery/ –