我试图使用以下方法从点击事件处理程序中排除图像:
$('#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建议如何解决这个问题?
由于
答案 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 。
那个复选框应该做什么,你为什么要过滤它?