カスタムdropdown()があるとしましょう。ボタンをクリックするとメニューが表示され、ユーザーがメニューの外をクリックすると閉じます。だから私はこのようなことをします:
$(myDropDown).mousedown(dropDownMouseDown);
$("html").mousedown(htmlMouseDown,myDropDown);
function dropDownMouseDown(event) {
event.target.open();
event.stopPropagation();//I need this line or else htmlMouseDown will be called immediately causing the dropDown-menu to close right before its opened
}
function htmlMouseDown() {
this.close();
}
まあ、これはうまくいきます。しかし、これを 2 つ追加するとどうなるでしょうか。最初をクリックして開くと、2 つ目も同じように開きます。これは、dropDownMouseDown が伝播を停止し、htmlMouseDown が最初に呼び出されないようにするためです。どうすればこれを回避できますか? これらの 2 つしかない場合、そのためのロジックを追加するのはもちろん簡単ですが、数量が動的である場合はどうなりますか? また、event.stopPropagation() を呼び出したくない場合もあります。これは、そのイベントをリッスンする、使用している他のライブラリに対して奇妙なことを行うためです。$("html").mousedown(htmlMouseDown,myDropDown) という行を dropDownMouseDown-handler 内に入れてみましたが、バブルが html 要素に到達するとすぐに呼び出されます。