2014-09-26 4 views
0

Мы ведем журнал, у нас есть заголовок веб-сайта, на котором мы регистрируемся в любое время. У нас есть элементы внутри элемента, которые также нуждаются в регистрации. Есть ли способ только регистрировать дочерние элементы при нажатии в заголовке с помощью функции jquery .not() или чего-нибудь еще?выберите дочерний элемент без выбора родительского элемента

Here is the working jsfiddle

HTML

<div id="header"> 
    <div><a class="box blue" href="#">Blue</a></div> 
    <div><a class="box red" href="#">Red</a></div> 
    <div><a class="box green" href="#">Green</a></div> 
</div> 

CSS

$('#header').on('click', function() 
    alert('header') 
}); 
$('.box').on('click', function() { 
    alert($(this).attr('class')); 
}); 
+0

Я хочу, чтобы дочерние элементы регистрируемые, но не '# header' также регистрируются в журнале. При щелчке дочернего элемента оба регистрируются в настоящее время –

+0

Возможный дубликат [jquery stop child triggering parent event] (http://stackoverflow.com/questions/2364629/jquery-stop-child-triggering-parent-event) – melancia

+1

Вы имеете в виду как это http://jsfiddle.net/j08691/5xp44dt0/1/? – j08691

ответ

4

Вы можете использовать .stopPropagation() функцию JQuery, чтобы остановить бульканье от детей до родителей:

$('#header').on('click', function() { 
 
    alert('header'); 
 
}); 
 
$('.box').on('click', function(e) { 
 
    e.stopPropagation(); 
 
    alert($(this).attr('class')); 
 
});
#header { padding:20px; background:yellow; overflow:auto; } 
 
    .box { width:50px; height:50px; float:left; margin:0 20px 0 0; } 
 
    .blue { background:blue; } 
 
    .red { background:red; } 
 
    .green { background:green; } 
 
\t a { color:white; display:block; text-align:center; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="header"> 
 
\t <div><a class="box blue" href="#">Blue</a></div> 
 
    <div><a class="box red" href="#">Red</a></div> 
 
    <div><a class="box green" href="#">Green</a></div> 
 
</div>

2

e.stoppropagation является одним из способов остановить бурлит от дочернего элемента. кроме этого, вы можете просто проверить, является ли текущий целевой элемент тем, который нажал.

$('#header').on('click', function(e) { 
if(e.target == this){ 
    alert('header'); 
} 
}); 

fiddle

+0

Проверка цели лучше, потому что она останавливает это конкретное событие не всем другим событием, как Stoppropagation. – Kinga

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