È possibile riattivare lo stesso oggetto evento sul nodo padre, f.ex (jQuery). Sarà necessario copiare l'oggetto evento prima e passarlo nel grilletto al fine di catturare le stesse proprietà di evento nella bolla (f.ex e.pageX
):
var copy = $.extend(true, {}, e);
setTimeout(function() {
$(copy.target.parentNode).trigger(copy);
},500);
e.stopPropagation();
Demo: http://jsfiddle.net/GKkth/
EDIT
sulla base di un commento, penso che tu sia alla ricerca di qualcosa di simile a:
$.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);
});
});
});
}
});
};
Questo prototipo consente di associare un "gestore premium" che contiene una funzione next
che eseguirà tutti i gestori precedenti sullo stesso elemento quando lo si desidera. Usalo come:
$('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/
Quando clicco per ancorare, la mia funzione (GET a DB) non ha il tempo per l'esecuzione. Penso che sia necessario interrompere la propagazione all'avvio –
È necessario prendere in considerazione la possibile esperienza utente in questo caso: l'utente fa clic su qualcosa e non accade nulla finché non viene completata una chiamata al database. La cosa peggiore, potrebbe essere un lungo periodo di tempo per non rispondere. – ehdv
Questa è una cattiva risposta perché interrompere la propagazione è spesso necessaria quando si verificano diversi eventi sullo stesso elemento. È l'intera ragione per cui esiste il metodo. – kjdion84