2012-04-10 2 views
3

Я обрабатываю щелчок следующим кодом.Как обращаться с кликом на <tr>, но не на дочерних элементах?

Стол с входом

<table> 
    <tr> 
     <td> 
      <input type="checkbox" /> 
     </td> 
    </tr> 
</table>​ 

Нажмите обработчик

$('table tr').click(function(){ 
    alert('clicked'); 
});​ 

http://jsfiddle.net/n96eW/

Это хорошо работает, но если у меня есть флажок в тд, это его обработки тоже при нажатии.

Есть ли способ обработать щелчок TR, но не активировать дочерние элементы?

ответ

13

http://jsfiddle.net/n96eW/1/

Добавить еще один обработчик событий в вашем поле, чтобы stopPropagation:

$('table tr').click(function(){ 
    alert('clicked'); 
}); 

$('table tr input').click(function(e) { 
    e.stopPropagation(); 
}); 
​ 
+0

Это правильный способ сделать это. +1 – Dutchie432

+0

Большое спасибо! – yarikus

+2

@Ярослав Глюхов http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work В случае, если вы не знаете :) –

4

Вы можете проверить event.target фильтровать события:

$('table tr').click(function(e){ 
    if(e.target.tagName.toLowerCase() != "input") { 
     alert('clicked'); 
    } 
});​ 
1

Вы можете также использовать

$("tr").on('click',function() { 

    if (!$(event.target).is('input')) 
    alert('clicked'); 

}); 
Смежные вопросы