Ответ 1
Вы можете повторно запустить один и тот же объект событий на родительском узле f.ex(jQuery). Сначала вам нужно скопировать объект события и передать его в триггер, чтобы зафиксировать те же свойства события в пузырьке (f.ex e.pageX
):
var copy = $.extend(true, {}, e);
setTimeout(function() {
$(copy.target.parentNode).trigger(copy);
},500);
e.stopPropagation();
Демо: http://jsfiddle.net/GKkth/
РЕДАКТИРОВАТЬ
Основываясь на вашем комментарии, я думаю, вы ищете что-то вроде:
$.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);
});
});
});
}
});
};
Этот прототип позволяет вам привязать "премиальный обработчик", который содержит next
функцию, которая будет выполнять все предыдущие обработчики для одного и того же элемента, когда захотите. Используйте его так:
$('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
});