2013-08-26 34 views
0

當用戶點擊一個元素或其中的任何元素時,我需要觸發一個事件,除非他點擊了一個<a>元素。JQuery .click()選擇器忽略<a>子元素?

這是我現在想:

$("div:not(a)").click(function(e) { 
    alert("hello world"); 
}); 

您可以更好地理解這裏吧:

http://jsfiddle.net/cMBP3/1/

我怎樣才能做到這一點?

+2

[阻止父事件處理程序執行]的可能重複(http://stackoverflow.com/questions/1398582/prevent-execution-of-parent-event-handler) –

+2

僅供參考,'div:不(a)'選擇器沒有多大意義。這意味着*「選擇標籤名稱爲'div'的每個元素都沒有標籤名稱'a' *」。由於一個元素不能有兩個標籤名稱,'div:not(a)'相當於'div'。 –

+0

[check元素類型被點擊]的可能重複(http://stackoverflow.com/questions/17797038/check-element-type-clicked) –

回答

2

由於您的div從來都不是a,這是不行的。

你必須檢查你的目標元素爲a標籤是這樣的:

$('div').click(function(event) { 
    var $target = $(event.target); 
    if(!$target.is("a")) { 
     alert("hello world"); 
    } 
}); 

我已經更新了你的小提琴:Have a look

+2

這看起來很詭異:)你可能想要更新你的「e」參數爲「事件「來反映您在功能中使用的對象。 –

+0

謝謝,沒有注意到。 :-) –

2

你可以使用:

$("div").click(function (e) { 
    if (e.target.nodeName.toLowerCase() != 'a') alert("hello world"); 
}); 

jsFiddle example

1

這是未經測試,但希望給你的想法:

$(function(){ 
    $('div').click(function(e){ 
     if($(e.target).is('a')){ 
       e.stopPropagation(); 
     } 
    }); 
});