|
Есть кусок html
<tr> <td> <input id="some_id" type="checkbox" /> </td> <tr> На строку (tr) и на чекбокс вешается обработчик клика при помощи jQuery. Примерно так $("tr").click(function() { /*...*/ }); $("#some_id").click(function() { /*...*/ }); При клике на чекбокс также срабатывает и обработчик клика по строке. Как этого избежать? Заранее благодарен за ответы.
|
|||||||
| комментировать |
|
Все достаточно просто)
Если бы вы использовали только чистый Javascript, то Вам понадобилось бы написать примерно следующую функцию: function stopEvent(evt) { (evt && evt.stopPropagation) ? evt.stopPropagation() : window.event.cancelBubble = true; } А так как в любой обработчик в качестве параметра передается само событие, то в нужно было бы делать как-то так: function start(evt) { // функция, которую мы бы использовали в качестве обработчика) stopEvent(evt); } НО! Вы же используете JQuery. И в этом случае все значительно проще, так как уже есть готовая функция, а Вам достаточно сделать так: $("tr").click(function() { /*...*/ }); $("#some_id").click(function(event) { event.stopPropagation(); /*...*/ }); Вот и все, достаточно просто объявить входящий параметр, который передается всегда и использовать уже имеющуюся функцию) Надеюсь помог)
|
||||||
|
|
Можно еще через e.target
... if( (name = e.target || e.srcElement).tagName && name.toLowerCase() == 'tr' ) { ... } ... Но такой вариант более применим к конструкции типа $('table').click(fn) И когда ТР\ок 30+ =)
|
|||||
| Комментировать |