クリックイベントにjQueryの関数を使用する必要がある状況があり$.fn.one()
ますが、イベントの次の発生に適用したくない(通常のように)、その直後の発生に適用したい、次に自分自身のバインドを解除します(.one()
通常のように)。
.one()
最初のオカレンスに適用したくない理由document
は、バブリングフェーズの早い段階で呼び出されたイベントハンドラーからにバインドしているためです。そのため、最初にバブリングフェーズに到達するdocument
と、同じイベントの一部になります。次のクリックイベントがいつ発生するか知りたいです。
注:.stopPropagation()
アプリの他の部分が破損する可能性があるため、使用したくありません。
これが私が思いついた2つのオプションですが、もっとエレガントな解決策があるはずです。
ダブルバインドメソッド:
$(document).one('click', function() {
$(document).one('click', callback);
});
setTimeoutメソッド:
setTimeout(function() {
$(document).one('click', callback);
}, 1);
どちらの方法も問題なく機能しますが、ここに私の質問があります。setTimeoutまたは頻繁なイベントのバインドとバインド解除のいずれかでパフォーマンスにどのような影響があるのかわかりません。誰か知っているなら、聞いてみたいです。しかし、もっと重要なことは、このような将来の状況のために、このようなものを自分で測定する方法についていくつかの提案が欲しいです。
私はhttp://jsperf.comのようなサイトが大好きですが、それがこのようなものを測定するのに本当に役立つかどうかはわかりません。
そして明らかに、誰かがはるかに優れた解決策を見た場合、私はそれを聞くのが大好きです。