0

ドキュメント内の任意の場所をクリックするとボックスを非表示にしたいが、一部の領域ではないため、次のコードを記述しました。

$(document).not('#color_picker,#selected_color_box,#color_picker_choose,#choose_color_box').click(function(event){
                            event.preventDefault();
                            $('#color_picker').css('visibility','hidden');
                        })

しかし、ボックスが表示されることはありません。ユーザーが にある要素をクリックしても、どこでもクリックすると機能を.not()実行するようですが、ユーザーがそうでない要素をクリックすると、この関数は実行されません。

それで、私は何を間違っていますか?

4

3 に答える 3

2

.not()現在の選択をセレクターに一致しない要素にフィルターするだけです。documentセレクターと一致しないため、コレクションは変更されません。

代わりに、ターゲット要素ではないすべての要素に一致するセレクターでイベント委任を使用する必要があります。

$(document).on('click',':not(#color_picker,#selected_color_box,#color_picker_choose,#choose_color_box)',function(event){
    event.preventDefault();
    $('#color_picker').css('visibility','hidden');
})

event.target.idまたは、無視する ID のリストと比較できます。

var idArr = ['color_picker','selected_color_box','color_picker_choose','choose_color_box'];
$(document).on('click',function(event) {
    if ( idArr.indexOf(event.target.id) == -1 ) {
        event.preventDefault();
        $('#color_picker').css('visibility','hidden');
    }
});
于 2013-05-14T21:24:50.210 に答える
0

試しましたか:

$(document).find("*").not('#color_picker,#selected_color_box,#color_picker_choose,#choose_color_box')
于 2013-05-14T21:24:21.357 に答える
0

すべての要素を選択してからフィルタリングしてみてください

$('*').not('#color_picker,#selected_color_box,#color_picker_choose,#choose_color_box').click(function(event){
         event.preventDefault();
         $('#color_picker').css('visibility','hidden');
    })
于 2013-05-14T21:25:29.933 に答える