2013-06-26 47 views
2

我有一個元素疊加,具有時區中的任意位置單擊某些功能:如何使用jQuery識別單擊的元素?

<div id="overlay"> 
    some html and some <a href="#">links</a> 
</div> 

現在我想別的事情才發生的,如果你點擊那個區域內的鏈接:

$('#overlay').click(function() { 
if(clicked_element=="a") alert("clicked inside"); 
    else alert("you clicked a link"); 
}); 

我該如何填寫?

+2

'$( '#疊加一個')'? –

回答

6

您可以使用event.target

$('#overlay').click(function(e) { // <- note the parameter 
    alert(e.target); // <- the target 
}); 

在您的例子,它會是這樣的:

$('#overlay').click(function(e) { 
    if(e.target.nodeName == "A"){ 
     alert("clicked inside"); 
    }else{ 
     alert("you clicked a link"); 
    } 
}); 

爲了完整起見,這裏是一個天然的JavaScript解決方案:

document.getElementById("#overlay").addEventListener("click",function(e){ 
    alert(e.target); 
},false); 

如果你想找到最近的<a>的目標,你可以使用jQuery's closest()

+0

但目標沒有設置,如果沒有點擊鏈接 – rubo77

+0

@ rubo77你介意闡述嗎? –

+0

嗯,我首先想到的是「目標」是'a href'的目標,但它是鼠標的目標,被點擊。謝謝,這有效! – rubo77

1
$('#overlay').on('click', 'a', function() { 
    //'this' now refers to clicked link 
}); 
+1

以及我如何參考點擊一個非鏈接? – rubo77

+0

啊,好吧,我誤解了這個問題。如果你是針對特定的元素,那麼第二個參數只是一個jQuery選擇器 – jammykam

0

首先得到event對象:.click(function(e) {

那麼它target財產(e.target)將是你點擊的元素。爲確保您獲得鏈接,請嘗試以下操作:

var target = e.target; 
while(target && target.nodeName != "A") target = target.parentNode; 

例如,如果您在鏈接中有圖像,這將很有用。

0

試試這個

$('#overlay').click(function(e) { 
    if (e.target.nodeName === 'A') { 
     alert("Link clicked"); 
    } else { 
     alert('overlay clicked'); 
    } 
}); 

jsFiddle Link

+0

如果用戶點擊某個鏈接(例如鏈接中的圖像),該怎麼辦?與OP的例子不同,這仍然會提醒'點擊鏈接',因爲clicked元素不是a而是圖像。 –

+0

感謝您指出這一點,我已經更新了代碼來解決這個問題。 –

相關問題