问题描述
|
这是我到目前为止所拥有的,获取行号的效果很好,但是我需要这样做,以便当我单击表中的链接时,它不会触发函数内的代码。
<table>
<tr class=\"row\">
<td>A</td>
<td><a class=\"link\" href=\"foo.html\">Foo</a></td>
</tr>
<tr class=\"row\">
<td>B</td>
<td><a class=\"link\" href=\"Bar.html\">Bar</a></td>
</tr>
</table>
<script>
$(function(){
$(\'.row:not(.link)\').click(function(){
var $row = $(this).index();
});
});
</script>
解决方法
选择器.row:not(.link)将选择所有具有类\“ row \”而不具有类\“ link \”的元素,这不是您想要的。
您需要在a.link元素的click事件中使用event.stopPropagation,以便click事件不会传播到包括行在内的父项。
尝试这个:
<table>
<tr class=\"row\">
<td>A</td>
<td><a class=\"link\" href=\"foo.html\">Foo</a></td>
</tr>
<tr class=\"row\">
<td>B</td>
<td><a class=\"link\" href=\"Bar.html\">Bar</a></td>
</tr>
</table>
<script>
$(function(){
$(\'.row\').click(function(){
var $row = $(this).index();
});
$(\'.row .link\').click(function(e){
e.stopPropagation();
});
});
</script>
, 有点晚了,但这是我在Google中打开的第一个链接,以寻找相关主题的解决方案。因此,它可能对某人有用:
$(\".clickableRow\").click(function(e) {
if (e.target.nodeName != \"A\") {
window.document.location = $(this).attr(\"href\");
}
});
, 这是jQuery中的快速修复方法,只需使用instanceof
$(\"#news-table tr\").click(function(e){
if((e.srcElement instanceof HTMLAnchorElement)!=true )console.log(\"IIIIIIHA HA!\");
});
, 您需要防止事件在链接的click事件中传播-这是一个示例:http://jsfiddle.net/6t8u7/1/
如您所见,单击链接只会触发一个事件。单击该行会引发其他事件。
您得到当前行为的原因是链接“冒泡”到父元素的click事件。
, 有了data属性,就不需要一个类:
$(document).on(\'click\',\'[data-href]\',function(e) {
if($(e.target).hasClass(\'ignore\'))
return;
var ignore = [\'input\',\'a\',\'button\',\'textarea\',\'label\'];
var clicked = e.target.nodeName.toLowerCase();
if($.inArray(clicked,ignore) > -1)
return;
window.location = $(this).data(\'href\');
});
用法示例(tr
只是一个示例-您可以使用div
等):
<tr data-href=\"your_url\">
<td class=\"ignore\">Go nowhere</td>
<td>Go to your_url</td>
<td><a href=\"another_url\">Go to another_url</a></td>
<td><input type=\"text\" value=\"Go nowhere\"></td>
</tr>
, 您也可以在不显式选择第二个功能中的行的情况下使用它。
$(function(){
$(\'.row\').click(function(){
var $row = $(this).index();
});
$(\'.link\').click(function(event){
event.preventDefault();
event.stopPropagation();
});
});
, 只需添加:将“ 9”添加到行单击,链接元素将使用其自己的逻辑。
这是更详细的示例:
$(\"#table tr\").click(function(e) {
// Skip if clicked on <a> element
if (e.target.tagName == \'A\') return;
// Logic for tr click ...
});