1

私は、2つのセレクターを一緒に動作させ、別々に宣言したときと同じように動作させる時間の悪魔を抱えています。

私の問題:

特定の要素に含まれていない入力またはアンカータグに移動したときにメニューを閉じたい。入力とアンカーの両方を明示的にコーディングすると、必要な動作が得られますが、コードを凝縮して結合しようとすると、動作がおかしくなり、意図したとおりに機能しません。

したがって、基本的に、ユーザーフォーカスがセレクターの子ではない入力フィールドまたはアンカーにある場合、メニューを閉じたいと思います。2つのsperateハンドラーを使用すると、機能します。それらを組み合わせたい。

これを短くしようとしています…。

jQuery('#hdr input:not(#opt *)')
.focusin(function(event){
   setTimeout(function(){
       jQuery("#opt").hide()
   },100);
 });
jQuery('#hdr a:not(#opt *)')
.focusin(function(event){
   setTimeout(function(){
       jQuery("#opt").hide();
   },100);
 });

私はこれらすべてを1行にまとめてみましたが、役に立ちませんでした。

jQuery('#hdr a input:not(#opt *)')
jQuery('#hdr a, #hdr input:not(#opt *)') <-- I expect this to work, but doesn't.
jQuery('#hdr a,input:not(#opt *)')
jQuery('#hdr *:not(#opt *)')

#hdr a、または#hdr inputのような単一の引数を実行した場合にのみ機能するようですが、それらを組み合わせようとすると、運がありません。私は高低を検索しましたが、運がありません。

4

2 に答える 2

4

not次の方法を使用できます。

$('#hdr').find('a,input').not('#opt *')

巨大なセレクター文字列の代わりにメソッドを使用する方が、読みやすくなる場合があります。

于 2013-01-27T08:32:39.470 に答える
2

すべての要素は#optの子であり、セレクターではありません。親である#optと、その中のすべての要素またはノードがイベントハンドラーから除外されていることを確認してください。フィドルでこのように:

ワーキングフィドル

@elclanrsのメソッドも機能します。

$("#hdr a:not(#opt), #hdr input:not(#opt)")
于 2013-01-27T08:47:53.950 に答える