我有一个表格,每行(tr
标记)设置了三个事件onclick
,onmouseout
和onmouseover
。
对于每一行,前三个td
标记包含onclick
个事件。
<tr onclick="javascript:getWSData(...)" onmouseout="this.className=clTwo" onmouseover="this.className=clThree">
<td onclick="popDivInfo(false, verRicDivCreaInfo('details'))">
Details
</td>
<td onclick="popDivInfo(false, verRicDivCreaInfo('edit'))">
Edit
</td>
<td onclick="if(confirm('Are you sure?')) {getWSData('delete');event.stopPropagation(); } else {alert('Cancelled!')}">
Delete
</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
据我所知:一旦td
的{{1}}被触发,默认事件链应首先执行它,然后执行onclick
的{{1}} }。这对我来说没问题。
但是,如果删除(第三个tr
),我不希望事件链向前发展,所以我使用onclick
;
标准行为是完全正确的,但我遇到了一个问题:很快发生删除详细信息 编辑 td
停止工作。删除仍然有效时,第一次单击(删除后)不能正常工作(我不完全知道发生了什么)。当我再次点击时,td的onclick(详细信息和编辑)都是新完成的。
更多的事情:
event.stopPropagation()
方法删除其td
(如果我对此指令发表评论,则不会发生任何事情)tr
的onclick始终完全正常工作remove
操作,因此不会有任何不完整的tr
有什么想法吗?我完全没有想法。
答案 0 :(得分:1)
我记得tr
就像虚拟标记单元。这仅适用于tbody
等组元素。它根本不参与事件冒泡。所以你不应该绑定任何事件。我们可以在示例中看到这一点:http://jsfiddle.net/z9vVM/。在这里,您看到绑定到tr
元素的事件无论如何都有目标td
,而不是tr
。
将事件绑定到tr
与将该行中的所有td
一些类和绑定事件绑定到该类相同 - tr
只是对元素进行分组的方式。
这就是您stopPropagation
无效的原因。根本没有任何传播。
你可以全身心投入的方式 - 用类操作。看一下这个例子:http://jsfiddle.net/RZscw/1/