Jquery 从事件处理程序中排除元素

Jquery 从事件处理程序中排除元素,jquery,css,Jquery,Css,我正在尝试使用以下方法从单击事件处理程序中排除图像: $('#templtable .trhover *:not(#infoimg)').live('click', function(event) { event.stopPropagation(); $(this).toggleClass('selected'); $('#infoimg').click(function(event) { console.log("infoimg"); ev

我正在尝试使用以下方法从单击事件处理程序中排除图像:

$('#templtable .trhover *:not(#infoimg)').live('click', function(event) {
      event.stopPropagation();
      $(this).toggleClass('selected');

$('#infoimg').click(function(event) {
          console.log("infoimg");
    event.stopPropagation();
});
表格如下所示:

<table><tr class='trhover'><td><img id='infoimg' src='/images/icon-info.gif' alt='Details'><input type='checkbox' class='followup' id='1' value='234234'></td><td>234234</td></tr><table>
234234
然而,点击事件仍然活跃在图像上,anu建议如何解决这个问题

谢谢

坏代码…
首先,您没有关闭
,而是有一个额外的

第二,
end()
取消您的筛选器,该筛选器无论如何都没有正确使用,并且
live()
事件已被弃用,您应该使用
on()

如果要在
.trhover
上进行单击,则应执行以下操作:

$('.trhover').on('click', function(){});
要停止
接收
click()
事件,您可以执行Czeraz建议的操作。
此外,复选框应该做什么?为什么要过滤它?

错误代码…
首先,您没有关闭
,而是有一个额外的

第二,
end()
取消您的筛选器,该筛选器无论如何都没有正确使用,并且
live()
事件已被弃用,您应该使用
on()

如果要在
.trhover
上进行单击,则应执行以下操作:

$('.trhover').on('click', function(){});
要停止
接收
click()
事件,您可以执行Czeraz建议的操作。

此外,复选框应该做什么?为什么要筛选它?

您的代码无效。无论如何,如果要从执行单击事件中排除img,请使用选择器
$('tr*:not(img))
。但它会在您单击img时触发事件,因为当事件冒泡时。因此,必须绑定一个事件以停止传播

$('.trhover *:not(#infoimg)').bind('click', function(event) {
    event.stopPropagation();
    $('body').append('click -> '+event.currentTarget.tagName+'<br />');
});
$('#infoimg').click(function(event) {
    event.stopPropagation();
});
$('.trhover*:not(#infoimg)).bind('click',函数(事件){
event.stopPropagation();
$('body').append('click->'+event.currentTarget.tagName+'
'); }); $('#infoimg')。单击(函数(事件){ event.stopPropagation(); });
试试这个:

添加行的版本:

您的代码无效。无论如何,如果要从执行单击事件中排除img,请使用选择器
$('tr*:not(img))
。但它会在您单击img时触发事件,因为当事件冒泡时。因此,必须绑定一个事件以停止传播

$('.trhover *:not(#infoimg)').bind('click', function(event) {
    event.stopPropagation();
    $('body').append('click -> '+event.currentTarget.tagName+'<br />');
});
$('#infoimg').click(function(event) {
    event.stopPropagation();
});
$('.trhover*:not(#infoimg)).bind('click',函数(事件){
event.stopPropagation();
$('body').append('click->'+event.currentTarget.tagName+'
'); }); $('#infoimg')。单击(函数(事件){ event.stopPropagation(); });
试试这个:

添加行的版本:

在tr(class=trhover)中的所有项目(图像项目除外)上,您希望在哪些元素上注册单击事件?在tr(class=trhover)中的所有项目上,您希望在哪些元素上注册单击事件除了图片项目。这个解决方案是让你开心还是你的意思不同?首先谢谢。你的例子似乎很管用。然而,在我的网站上,情况并非如此,尽管我做了完全相同的事情(参见上面的更新代码)。这可能是因为表和图像都是动态添加的吗?此外,我注意到由于添加了*:not(#infoimg),我函数中的this变成了td而不是tr。为什么呢?我怎样才能把它保留在tr上?好的,我解决了我问题的第一部分。它现在正在工作。原因是该映像使用相同的id多次添加,只有第一个映像将具有事件处理程序。。。将#infoimg更改为.infoimg。你对我问题的第二部分有什么想法吗?试试这个:。将tr变量视为所需的元素。在我们的例子中,这是您在tr中单击的每个元素-因为我们使用*.Ok,感谢您的解释。我设法使用$(this.parent();)获得了tr;。现在一切正常。谢谢你的明确回答!这个解决方案会让你开心吗?还是你的意思不同?首先谢谢。你的例子似乎很管用。然而,在我的网站上,情况并非如此,尽管我做了完全相同的事情(参见上面的更新代码)。这可能是因为表和图像都是动态添加的吗?此外,我注意到由于添加了*:not(#infoimg),我函数中的this变成了td而不是tr。为什么呢?我怎样才能把它保留在tr上?好的,我解决了我问题的第一部分。它现在正在工作。原因是该映像使用相同的id多次添加,只有第一个映像将具有事件处理程序。。。将#infoimg更改为.infoimg。你对我问题的第二部分有什么想法吗?试试这个:。将tr变量视为所需的元素。在我们的例子中,这是您在tr中单击的每个元素-因为我们使用*.Ok,感谢您的解释。我设法使用$(this.parent();)获得了tr;。现在一切正常。谢谢你的明确回答!