2011-05-19 80 views
4

我使用以下color picker它工作正常,但是當我點擊顏色選擇器圖標時,我不想它冒泡到身體。所以我嘗試了以下,現在顏色選擇器不工作。jQuery stopPropagation不工作

檢查http://jsfiddle.net/CWGgM/

如果你從jsfiddle中刪除下面的代碼,那麼它的工作原理。是什麼原因造成這種

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

你鏈接到正確的小提琴? – alex 2011-05-19 05:26:44

+0

@alex oops。固定。它是http://jsfiddle.net/CWGgM/ – Pinkie 2011-05-19 05:27:37

回答

3

這似乎是使用自己的live() style code,在事件被允許冒泡並在document進行處理。

因此,事件必須傳播到document或他們不會工作。

您可避免事件觸發機身採用以下解決方法......

$('body').click(function(event) { 
    if ($(event.target).parent()[0] == $('.mColorPickerTrigger')[0]) { 
     return true; 
    } 
}); 

jsFiddle

或者,這可能與多個拾色器更好地工作......

$('body').click(function(event) { 
    if ($(event.target).parent().hasClass('mColorPickerTrigger')) { 
     return true; 
    } 
}); 

jsFiddle

+0

謝謝,這適用於圖標的特定情況,但它希望div #test內的所有內容不會冒泡到正文,這就是爲什麼我使用包裝#test。這仍然是可能的。 – Pinkie 2011-05-19 07:33:45

1

就像@alex提到的那樣,顏色選擇器似乎在使用live()來監聽整個文檔的點擊。在阻止傳播之前,您可以檢查事件是否源自顏色選擇器,如果它發生了,就讓它起泡。您需要使用closest(),因爲可以單擊顏色選擇器圖標的<span>容器或<img>元素。

$('#test').click(function(e){ 
    if($(e.target).closest('.mColorPickerTrigger').length) return; 
    e.stopPropagation(); 
}); 

檢查出的jsfiddle演示:http://jsfiddle.net/CWGgM/1/

+0

是的,但你擁有它的方式,它仍然會冒泡到身體。我相信既然顏色選擇器是用來製作文檔的,那麼就沒有辦法解決這個問題了。 – Pinkie 2011-05-19 18:13:32

+0

我的解決方案阻止**所有內容,但是**顏色選擇器的單擊事件,爲什麼會出現這種問題?它實際上是一種與您接受的解決方案類似的解決方案,除非您單擊圖標旁邊的'',否則,如果啓用'stopPropagation()'行,我無法獲得任何已接受的答案,這就是你想要做的第一件事。在我的示例中,其他所有事情都停止在div上傳播*,阻塞的警報不在主體上,但是在調用實際可行的'stopPropagation()'之前。 – DarthJDG 2011-05-19 18:26:27

+0

你的解決方案仍然泡在身體上,這不是我想要的。檢查http://jsfiddle.net/CWGgM/2/ – Pinkie 2011-05-19 18:44:26