2014-01-16 37 views
1

我正在建立一个选择框的div和跨度。一切正常,但现在我试图添加一个:not()选择器来检测用户单击#signup-currency-selectbox及其子项以外的任何内容时下拉框是否可见。如果它是可见的,则需要在该点隐藏。以下是我目前有:不能得到:not()选择器正常工作

HTML:

<div id="signup-currency-selectbox" class='selectBox'> 
    <span id="signup_currency" class='selected'></span> 
    <span class='selectArrow'></span> 
    <div class="selectOptions" > 
     <span class="selectOption signup-currency" value="1" >$USD</span> 
     <span class="selectOption signup-currency" value="4" >£GBP</span> 
     <span class="selectOption signup-currency" value="6" >€EUR</span> 
     <span class="selectOption signup-currency" value="2" >$CAD</span> 
     <span class="selectOption signup-currency" value="3" >$AUD</span> 
    </div> 
</div> 

的jQuery:

$(":not(.selectBox)").click(function(){ 
    $('div.selectOptions').css('display','none'); 
}); 

现在我有多个选择框的与类.selectBox,所以这将是最好使用。每次每用户点击除.selectBox之外的其他东西的时间?出于某种原因,即使.selectBox及其任何子项被点击,该功能也会执行。有没有人在这里看到任何错误?另外,我删除了if语句(不确定是否需要它开始)。

回答

4

Yikes,看起来像一个低效率的选择器。我这样做:

$(document).click(function() { 
    $('div.selectOptions').hide(); 
}); 

$('.selectBox').click(function(e) { 
    e.stopPropagation(); 
}); 

如果单击.selectBox之外,该事件将泡沫达document和申报单将被隐藏。如果你点击里面,冒泡将被阻止,divs将保持打开状态。

+0

+1,但如果你点击另一个'.selectBox',它将不起作用。但是,这是解决问题的方法..我会让打开一个'.selectBox'的代码关闭所有其他的.. –

+0

完美工作,比我的想法更有效率,非常感谢! –

+0

好点@ GabyakaG.Petrioli,谢谢。 –