【发布时间】:2013-05-03 08:25:53
【问题描述】:
我有一个表,在每一行(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 的onclick,默认事件链应该首先执行它,然后应该执行tr 的onclick。这对我来说没问题。
但是,在删除的情况下(第三个td),我不希望那个事件链继续下去,所以我使用了event.stopPropagation();
标准行为是完全正确的,但我遇到了一个问题:一旦删除发生 Details 或 Edit td 停止工作。第一次单击(删除后)不能以最佳状态工作(我不完全知道发生了什么),而删除仍然有效。当我第二次单击时,td 的 onclick(详细信息和编辑)都刚刚完全正常工作。
还有几件事:
- 删除前的行为完全正确
- 每个删除操作都使用 jQuery
remove方法删除其tr(如果我评论此指令,则不会发生任何事情) - 发生此问题时,会在整个列(详细信息和编辑)上发生这种情况
- 如果我不确认删除过程,问题不会发生
-
tr的 onclick 始终可以正常工作 - Details 或 Edit 上的第一次单击(删除后)确实部分启动了 javascript 操作(因为启动了预加载),但此操作未完成。
- 即使 td 动作没有完成,
tr动作也会一直执行,所以不会有无用的stopPropagation()
有什么想法吗?我完全没有想法。
【问题讨论】:
-
你确定你没有为所有事件设置 event.stopPropagation() 吗?
-
我没有明确地这样做,我担心它是由其他东西隐式设置的。
-
您的示例对我来说很好,请参阅jsFiddle。您必须在其他代码中执行其他操作。
-
@FranciscoAfonso 即使 td 操作遇到问题,也会始终执行 tr 操作。所以没有无用的 stopPropagation()。
标签: javascript html javascript-events