2

divの外側をクリックしたときにdivを閉じる方法に関する他の多くの質問を読みましたが、 .live() にバインドされている他の要素があるという複雑な問題があります

私がしたいことは、「ライブ」要素をクリックした場合を含め、ページの他の場所をクリックするとdivが消えることです。そのライブ要素をクリックすると、ハンドラーが正常に処理されます。

私が読んだ限りでは、div を閉じる処理の基本的な方法は、または $document にクリック リスナーをアタッチすることですが、これにより、他のライブ イベントが前述の body/doc ハンドラーを通過してバブリングするのを防ぐことができます。これを回避する方法はありますか?

4

1 に答える 1

1

ライブでは、イベントははしごを一番前から最後までこの順序でバブルアップします。「ライブ」要素のクリック (body オブジェクトの直接/間接の子) で、false を返さないか、伝播を停止しない場合、はしごをバブルアップしてドキュメントのクリック ハンドラーに到達します。ドキュメントのクリックをライブ経由で添付してもうまくいかないようです。

ここでサンプル実装を確認してください: http://jsfiddle.net/VHtSP/6/

$('div.menu').live('click', function(e) {
    e.stopPropagation();
    alert('click inside menu. will not propagate.');
    return false;
});

$(document).click(function() {
    alert('document click() handler.');
    // close the div
    $('div.menu').hide();
});

$('a').live('click', function() {
    alert('<a> click() handler');
    // .. your code to handle the live element's click
});
于 2011-12-18T10:09:23.583 に答える