Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象上未触发Onclick_Javascript_Html - Fatal编程技术网

Javascript 对象上未触发Onclick

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> <

所以我有一张有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='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;
}