Javascript 对象上未触发Onclick
所以我有一张有X行的桌子。我有以下HTML代码:Javascript 对象上未触发Onclick,javascript,html,Javascript,Html,所以我有一张有X行的桌子。我有以下HTML代码: <tr id='row1' onClick="FormTRClick('1')"><td><a href='#'>Bla</a></td></tr> <tr id='row2' onClick="FormTRClick('2')"><td><a href='#'>Bla</a></td></tr> <
<tr id='row1' onClick="FormTRClick('1')"><td><a href='#'>Bla</a></td></tr>
<tr id='row2' onClick="FormTRClick('2')"><td><a href='#'>Bla</a></td></tr>
<tr id='row3' onClick="FormTRClick('3')"><td><a href='#'>Bla</a></td></tr>
<tr id='row4' onClick="FormTRClick('4')"><td><a href='#'>Bla</a></td></tr>
我知道我也可以使用逆document.getElementById('chk'+ctrl.).checked=!document.getElementById('chk'+ctrl.)。选中了
,但这不是重点,我还有额外的代码
谢谢您需要将事件侦听器附加到这些单击,并停止传播:
或者,您可以检查目标元素: HTML:
您需要将事件侦听器附加到这些单击,并停止传播:
或者,您可以检查目标元素: HTML:
那么就这样做吧。在HTML中:
<tr id='row1' onClick="FormTRClick(this, '1')"><td><a href='#'>Bla</a></td></tr>
使用大写标记名更新这样做。在HTML中:
<tr id='row1' onClick="FormTRClick(this, '1')"><td><a href='#'>Bla</a></td></tr>
使用大写标记名更新由于链接是表行的一部分,因此当您单击它们时,它们将始终触发表行的onclick 不过,有一个简单的解决方法
<tr id='row1' onClick="FormTRClick('1');"><td><a href='#' onmouseover="linkOver();" onmouseout="linkOut();">Bla</a></td></tr>
由于链接是表行的一部分,因此当您单击它们时,它们将始终触发表行的onclick 不过,有一个简单的解决方法
<tr id='row1' onClick="FormTRClick('1');"><td><a href='#' onmouseover="linkOver();" onmouseout="linkOut();">Bla</a></td></tr>
单击链接仍然会触发事件并传递表行,因为链接是表行的一部分……是的,Dave是对的。不幸的是,它仍在激活onClick事件。单击链接仍将触发事件并传递表行,因为链接是表行的一部分…是的,Dave是对的。不幸的是,它仍在激活onClick事件。谢谢。我已将该部分更改为event.target.tagName是否为TD。效果最好!我刚刚发现它在IE中不起作用,我得到以下错误:
'target.tagName'为空或不是对象
。我尝试过使用标记名的nodeName isntead,但没有效果。问题不在于标记名
。这是IE不做target
。使用event.srcement
进行IE。谢谢。我已将该部分更改为event.target.tagName是否为TD。效果最好!我刚刚发现它在IE中不起作用,我得到以下错误:'target.tagName'为空或不是对象
。我尝试过使用标记名的nodeName isntead,但没有效果。问题不在于标记名
。这是IE不做target
。在IE中使用event.srcmelement
。这种解决方案可以工作,但不是一种优雅的方式。我接受了约瑟夫的回答,因为他的回答是干净的。这个解决方案会奏效,但这不是一个优雅的方式。我接受了约瑟夫的回答,因为他的回答是干净的。
function FormTRClick(elem, ctrl) {
if (elem.tagName != 'TR') return;
//do what you need
}
<tr id='row1' onClick="FormTRClick('1');"><td><a href='#' onmouseover="linkOver();" onmouseout="linkOut();">Bla</a></td></tr>
var linkIsOver = false;
function FormTRClick(ctrl) {
if (!linkIsOver) {
if (document.getElementById('chk' + ctrl).checked == true) {
document.getElementById('chk' + ctrl).checked = false;
} else {
document.getElementById('chk' + ctrl).checked = true;
}
}
}
function linkOver () {
linkIsOver = true;
}
function linkOut () {
linkIsOver = false;
}