あなたは再トリガすることができ、同じイベントオブジェクトを親ノード、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/
EDIT
あなたのコメントに基づいて、私はあなたのような何かを探していると思う:
$.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
});
はDEMO:私は固定する]をクリックするとhttp://jsfiddle.net/BGuU3/1/
、私の関数は(DBにGET)を実行する時間がない持っています。私はその開始のstopPropagationに必要だと思う –
可能性のあるユーザーエクスペリエンスを考慮する必要があります:ユーザーが何かをクリックし、データベース呼び出しが完了するまで何も起こりません。最悪の場合、それは応答が遅く見える長い時間かもしれません。 – ehdv
これは悪い答えです。なぜなら、同じ要素に複数のイベントがバブリングされている場合、伝播の停止が必要な場合が多いからです。メソッドが存在するのはそれが全理由です。 – kjdion84