Событие щелчка в строке таблицы - срабатывает только в том случае, если больше ничего «щелкнуто» - PullRequest
12 голосов
/ 18 мая 2009

У меня возникли проблемы с некоторым кодом jQuery, и я надеюсь и думаю, что решение относительно простое.

Скажем, у меня есть таблица как:

<table>
   <tr>
     <td><input type="checkbox" name="hai" value="der" /></td>
     <td><a href="mypage.php">My link</a></td>
     <td>Some data</td>
     <td>Some more data</td>
   </tr>
   ...
</table>

Теперь через JavaScript я делаю следующее в jQuery (document) .ready ();

jQuery("table tr").click(function(){
   var row = jQuery(this);
   var hasClass = row.hasClass("highlight");
   jQuery("table tr").removeClass("highlight");
   if(!hasClass){
     row.addClass("highlight");
   }
});

Все это довольно простые вещи - я хочу иметь возможность щелкнуть строку и выделить ее, и можно выделить только одну строку за раз (очевидно, в моем реальном коде я делаю больше) - теперь вот моя проблема:

Когда пользователь щелкает тег привязки или флажки, это также вызывает событие щелчка строки, и я не могу понять, как это отфильтровать? Я знаю, что мне нужно включить событие в мой обработчик кликов, но как проверить это таким образом, чтобы оно работало в максимально возможном количестве браузеров?

Ответы [ 3 ]

15 голосов
/ 18 мая 2009

Попробуйте добавить обработчики к другим элементам, которые реагируют на события щелчка и не дают событию всплыть Это будет в дополнение к тому, что у вас уже есть.

jQuery('table input, table a').click( function(e) {
    e.stopPropagation();
    return true;
}):
3 голосов
/ 18 мая 2009
$("table tr").click(function(event){
   if (event.currentTarget.tagName != "TR") { return; }

   $(this).closest("table").find("tr.highlight").removeClass("highlight");
   $(this).addClass("highlight");
});
1 голос
/ 18 мая 2009
$("table tr").click(function(e){

if (e.target instanceof HTMLInputElement || e.target instanceof HTMLAnchorElement){
return;
}
var row=$(this);
$('table tr').removeClass('highlight');
row.addClass('highlight','normal');

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...