Sie können wieder lösen die gleiche Ereignisobjekts auf dem Eltern-Knoten, f.ex (jQuery). Sie müssen das Ereignisobjekt zuerst kopieren und in den Trigger passieren, um die gleichen Ereigniseigenschaften in der Blase (f.ex e.pageX
) zu erfassen:
var copy = $.extend(true, {}, e);
setTimeout(function() {
$(copy.target.parentNode).trigger(copy);
},500);
e.stopPropagation();
Demo: http://jsfiddle.net/GKkth/
EDIT
Basierend auf Ihren Kommentar, ich glaube, Sie nach etwas suchen, wie:
$.fn.bindFirst = function(type, handler) {
return this.each(function() {
var elm = this;
var evs = $._data(this).events;
if (type in evs) {
var handlers = evs[type].map(function(ev) {
return ev.handler;
});
$(elm).unbind(type).on(type, function(e) {
handler.call(elm, e, function() {
handlers.forEach(function(fn) {
fn.call(elm);
});
});
});
}
});
};
Dieser Prototyp ermöglicht es Ihnen, ein „Premium-Handler“ zu binden, die eine next
Funktion enthält, die alle bisherigen Handler auf das gleiche Element ausgeführt wird, wenn Sie wollen. Verwenden Sie es wie:
$('button').click(function() {
console.log('first');
}).click(function() {
console.log('second');
}).bindFirst('click', function(e, next) {
console.log('do something first');
setTimeout(next, 1000); // holds the other handlers for 1sec
});
DEMO: http://jsfiddle.net/BGuU3/1/
Wenn ich Anker klicken, um meine Funktion (auf DB GET) hat keine Zeit auszuführen. Ich denke, die notwendig stopPropagation auf Start –
Sie dort die mögliche Benutzererfahrung Schaden zu berücksichtigen sind: Der Benutzer klickt auf etwas und es passiert nichts, bis ein Datenbank-Aufruf abgeschlossen ist. Worst-Case, das könnte eine lange Zeit des Nicht-Reagierens sein. – ehdv
Dies ist eine schlechte Antwort, da das Stoppen der Propagierung häufig erforderlich ist, wenn mehrere Ereignisse auf demselben Element auftreten. Es ist der ganze Grund, warum die Methode existiert. – kjdion84