2013-08-17 49 views
2

我有父節點和子節點。他們都有'點擊'事件列表。由於<a>是子元素,因此我無法點擊它而不點擊父父< div & gt,所以總是會觸發父<div>的事件。我如何得到子元素<a>的事件而不觸發父母的一個<div>? 這裏是jsFiddle和代碼:
HTML獲取子元素的事件而不觸發父母的相同事件

<div id="container"> 
    <a href="" id="link"></a> 
</div> 

CSS:

#container { 
    width:100px; 
    height:100px; 
    background:blue; 
    position:relative; 
    cursor:pointer; 
} 
#link { 
    width:20px; 
    height:20px; 
    background:green; 
    position:absolute; 
    top:10px; 
    left:10px; 
} 

JS:

$('#container').on('click', function() { 
alert('container'); 
}); 
$('#link').on('click', function() { 
alert('link'); 
}); 
+2

你確定你貼權小提琴? – Sergio

+2

您缺少ID選擇器的'#'符號。 – undefined

+0

@Sergio,對不起,小提琴是錯的。我替換了它。 –

回答

3

如果你不希望事件到容器的傳播,使用stopPropagation

$('#container').on('click', function() { 
    alert('container'); 
}); 
$('#link').on('click', function(e) { 
    alert('link'); 
    e.stopPropagation(); 
}); 

(如果你不想觸發鏈接的默認行爲,更換e.stopPropagation();return false;

+0

我在評論中指出了一些問題,所以現在它按我的預期工作。但你的答案也非常有價值,因爲我想這可能是我下一個問題的答案:) –

+0

爲什麼'#link'元素事件首先被觸發?是因爲它在z-index中更高? –

+1

不,這是因爲它在DOM樹的下游:孩子在父代之前接收事件。 –

相關問題