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

时间:2012-02-10 07:40:17

标签: jquery css

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

$('#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>

然而,点击事件仍然在图像上有效,anu建议如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:3)

您的代码无效。无论如何,如果要排除img执行click事件,请使用选择器$('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();
});

试试这个:http://jsfiddle.net/pNaaD/
添加行的版本:http://jsfiddle.net/Zxk8R/

答案 1 :(得分:0)

坏的代码......
首先,您没有关闭<tr>,而是额外</td> 其次,end()会取消您的过滤器,但无法正常使用,并且live()事件已弃用,您应该使用on()
如果点击应该适用于.trhover,您应该这样做:

$('.trhover').on('click', function(){});

要阻止<img>收到click()事件,您可以执行建议的 czerasz
那个复选框应该做什么,你为什么要过滤它?