2013-04-23 3 views
2
<div id="firstDiv" style="width:1000px;height:600px;"> 
    <div id="secondDiv" style="width:200px;height:200px;"></div> 
</div> 

У обоих DIV есть события click. Когда я нажимаю secondDiv, событие click-event для firstDiv также запускается (я думаю, это логично, так как я также щелкнул в границах firstDiv). Тем не менее, я хочу только запустить событие click для DIV, которое я на самом деле нажал на кнопку мыши.Как щелкнуть() нажал только DIV, не содержащий DIV?

Как это сделать?

+3

дубликат http://stackoverflow.com/questions/2015041/two-differents-onclick-on-two-divs-one-over-the-other – Mandar

+0

Возможный дубликат [click - only on "direct" onclicks] (http://stackoverflow.com/questions/6512803/click-only-on-direct-onclicks) – Nope

+0

['event.stopPropagation'] (http://api.jquery.com/event.stopPropagation/)? –

ответ

10

На внутреннем сНе оный:

$('#secondDiv').click(function(e){e.stopPropagation();}); 

.stopPropagation() предотвратит событие щелчка от бурлит от внутренних дел до родительского DIV или любого другого предка.

5

Элементы DOM по умолчанию активируют события. Вы можете остановить с помощью stopPropagation

$('#secondDiv').on('click', function(e){ 
    e.stopPropagation(); 
}); 
+0

@ user125697 Я думаю, вы использовали 'preventDefault'. Вы должны использовать 'stopPropagation' –

+0

Моя ошибка. Не беспокойся :) – lifetimes

1

Вы можете просто сделать это -

$('#secondDiv').click(function(event) { 
    // do your stuff 
    return false; 
}); 

return false; является эквивалентом event.stopPropagation() и event.preventDefault()

0

Вы можете использовать для этого event.stopPropagation() барботажа. Что-то вроде этого:

$("secondDiv").click(function(event) { 
    event.stopPropagation(); 
    //Write your logic here 
}); 

Для получения дополнительной информации по этому вопросу обратитесь к документации HERE

1

Вы хотите использовать event.stopPropagation(), который позволит предотвратить событие от барботирования до родительских элементов (в вашем случае). preventDefault выглядит многообещающим, но на самом деле он предотвращает действия по умолчанию - не пузырится.

$("#firstDiv").click(function() { 
    alert("Div One"); 
}); 

$("#secondDiv").click(function(e) { 
    e.stopPropagation(); 
    alert("Div Two"); 
}); 

Демонстрация обоих here.

Смежные вопросы