2011-09-14 44 views
5

Super-technical drawingjQuery的:點擊* *僅此元素

在上面的高度藝術繪畫,綠色廣場是粉紅色的的孩子。粉紅色的一個是由我的功能環繞綠色的,所以綠色方塊可以是任何東西 - 超鏈接,圖像,按鈕等。

我想捕獲一個點擊粉紅色div只有當它不是'點擊綠色元素。

這可以通過在綠色方塊上使用mouseenter翻轉布爾值來完成,但這對我來說似乎是一種混亂的方式。

任何線索?

重要編輯:我不能亂搞綠色廣場,所以沒有添加任何東西到點擊事件。

+3

我最傷心,SO不讓我創建新標籤 '令人興奮的圖像'= [ –

+0

做這個線程:http://stackoverflow.com/questions/ 6635659/jquery-bind-click-any-but-element與你的問題大致相同? – JMax

+0

類似但不完全。 –

回答

8

你可以這樣做:

$('.pink-box-selector').click(function(e) { 
    if ($(e.target).is('.pink-box-selector')) { 
     // do stuff here 
    } 
}); 
+0

正如一個側面說明,這種解決方案的優點之一是,你不必修改基於你包裝什麼元素的代碼(因爲你說的包裝元素可能會有所不同)。它基本上是白名單,而不是黑名單。 – jmar777

+0

完美。乾杯。 –

1

請問$("#div_id :not('#excluded_element')).click();有幫助嗎? http://api.jquery.com/not-selector/

+1

此選擇器不會選擇任何內容。它會查找'#div_id'中的某個* *,它不是*實際存在的唯一元素。 – jmar777

+0

@ jmar777很好的觀察。 –

0

設置一個單獨的單擊事件偵聽器 「綠色」 元素,並將它event.preventDefault()

5

兩個選項。您可以先檢查目標是否是綠色格。

$('#pinkdiv').click(function(e) { 
    if ($(e.target).is('#greendiv')) return; 
    // handle the event 
}); 

或者您可以正常編寫粉紅色div的點擊處理程序,並停止點擊綠色div傳播。

$('#greendiv').click(function(e) { 
    e.stopPropagation(); 
}); 
+0

@ jmar777的第一個選項檢查目標是否是粉紅色div的解決方案可能更有意義。 –

+0

這個也不錯,不過:)。 – jmar777