1

はい、この質問は以前に尋ねられましたが、それは私の問題を解決しませんでした。

したがって、この状況を考えてみましょう。たとえば、divがあるとしましょう。これでcontainer、このdivには、他にもさまざまなオブジェクトがたくさん<a>, <img />, <div>, <ul>含まれています。

これで、ユーザーはそのdivで何かを実行したり、メッセージを書き込んだりすることができます...しかし、そのcontainer要素の外側のどこかをクリックすると、それは消えるはずなので、それは簡単ですよね?

$(document).on("click", document, function(event){
    if($(event.target).is(".container")) return;
    $(".container").hide();
});    

確かにこれは機能しますが、同時に機能しません。ターゲットがそうでないかどうかをチェックするだけなので、ボタンをクリックすると消えます。そのステートメントcontainerにすべての要素を含めることができます。ifしかし、私の場合、それは非常に長いリストになるでしょう...だからもっと良い方法がなければなりません

はい、使用しようとしましたが、機能しませんでした。単純なイベントの代わりにevent.stopPropagation()使用しているためだと思います。これを手伝ってください...onclick

また、私はあなたのためにこのフィドルをセットアップしました:http: //jsfiddle.net/nVfJ5/

4

2 に答える 2

1

documentいつでも利用できるので、委任されたイベントハンドラーは必要ありませんか?

要素を非表示にしない場合は、のどこかに親として要素があるかevent.targetどうかを確認してください。.container.container

$(document).on("click", function(e){
    if(!$(e.target).closest(".container").length)
        $(".container").hide();
});  
于 2012-10-29T20:29:31.150 に答える
1

メソッドを使用しclosest()ます。定義上、ターゲットから開始し、ツリーを上って一致するものを見つけます。したがって、要素がセレクターの場合は停止します。

if($(event.target).closest(".container").length) return;

参照:http ://api.jquery.com/closest/

于 2012-10-29T20:29:50.840 に答える