1

我很高兴让两个选择器一起工作就像我宣布分开时一样。

我的问题:

当我移动到任何不包含在某个元素中的输入或锚标记时,我想关闭一个菜单。当我为输入和锚点显式编码时,我得到了我需要的行为 - 但是当我尝试压缩我的代码并将它们组合时,它的行为很奇怪并且不能按预期工作。

因此,基本上,当用户焦点位于不是我的选择器子项的输入字段或锚点时,我想关闭菜单。当我使用两个单独的处理程序时,它可以工作。我想把它们结合起来。

我正在尝试缩短这个......

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);
 });

我已经将所有这些都尝试在一行中,但无济于事:

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 *)')

它似乎只在我执行单个 arg 时有效:#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 回答