2014-01-16 36 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,謝謝。 –