Nie mogę znaleźć żadnych dobrych zasobów na temat tego, w jaki sposób zdarzenia niestandardowe w jquery są zaimplementowane. Podobnie jak w jaki sposób symulować pęcherzyków zdarzeń itpJak niestandardowe zdarzenia jQuery działają dokładnie
8
A
Odpowiedz
7
ten sposób:
// 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 ]();
}
}
Co się tu dzieje jest następujący :
Kiedy trigger
jest nazywany sprawdzaniem jQuery, aby sprawdzić, czy zdarzenie jest wyzwalane globalnie ($.trigger("event_name");
).
Jeśli jest nie wyzwalane są globalnie, i propagacja nie został zatrzymany i element w kwestii ma elementu nadrzędnego (!event.isPropagationStopped() && parent
jQuery), a następnie wywołuje zdarzenie wyzwalające ręcznie elementu nadrzędnego.
jQuery.event.trigger(event, data, parent, true);
Tam jest trochę więcej dzieje - patrz event.js w kodzie źródłowym jQuery.
1
Zapoznaj się z tutorials
$(document).bind("eventType", ...);
// This is equivalent to the plugin's $.subscribe("eventType", ...);
$(document).trigger("eventType");
// equivalent to plugin's $.publish("eventType");
kasy Również ten SO question
Powiązane problemy
- 1. Jak dokładnie działają niestandardowe obiekty Shadow w Robolectric?
- 2. Jak działają słabe zdarzenia?
- 3. Jak dokładnie działają pliki wykonywalne?
- 4. Zdarzenia nie działają na znaczniku obiektu html5
- 5. Jak dokładnie działają konsole Play 2.0/Async?
- 6. Jak dokładnie działają logi aplikacji Google App?
- 7. Szkieletowe zdarzenia nie działają
- 8. Zdarzenia niestandardowe UIView
- 9. Zdarzenia niestandardowe bańki w dół
- 10. Niestandardowe zdarzenia kręgosłupa
- 11. Jak działają zdarzenia C# za kulisami?
- 12. Zdarzenia Jquery nie działają na załadowanej zawartości ajax
- 13. Niestandardowe przekierowania błędów nie działają
- 14. Jak obserwować zdarzenia niestandardowe w AngularJS?
- 15. Jak emitować i obsługiwać niestandardowe zdarzenia?
- 16. Gdzie są zdefiniowane niestandardowe zdarzenia JavaScript Rails 3?
- 17. Jak rozgrzać niestandardowe zdarzenie jQuery do window.document?
- 18. Wywoływane zdarzenia niestandardowe związane z nazwami
- 19. Zdarzenie niestandardowe wyzwalacza jQuery synchronicznie?
- 20. Jak dokładnie działają sesje Google App Engine dla Java?
- 21. Jak dokładnie działają zapytania bazy danych PHP/MySQL?
- 22. Niestandardowe szablony administracyjne django nie działają
- 23. Jak dławić oddzwonienie zdarzenia jQuery?
- 24. Jak testować zdarzenia klawiatury jQuery?
- 25. jquery jtable niestandardowe zdarzenie click
- 26. Czy obserwatory mutacji DOM działają wolniej niż zdarzenia mutacji DOM?
- 27. zdarzenia kliknięcia wyrzuceniu dwukrotnie - jquery
- 28. jQuery dane niestandardowe zdarzeń (subskrybuj i wyzwalacz)
- 29. jQuery kliknij element zdarzenia
- 30. Jquery .on() zgłoszenie zdarzenia
Myślę, że nie chciał wyjaśnienia API, ale techniczne wyjaśnienie, w jaki sposób działają. – ThiefMaster
@ThiefMaster Jeśli tak jest, najlepszym sposobem nauki jest spojrzenie na źródło :) http://james.padolsey.com/jquery/ –