以下示例是否有办法:
<tr id="x" onclick="do_something()">
<td>Lorem ipsum</td>
<td>Lorem ipsum</td>
<td>Lorem ipsum</td>
<td>
<a href="javascript:;" onclick="do_something_else()">CANCEL</a>
</td>
</tr>
单击CANCEL链接时不执行do_something()和do_something_else()。
我只需要执行do_something_else()
谢谢
答案 0 :(得分:2)
有两种选择:
最低限度变更
现代之路
在onXYZ
属性中,您的代码实际上位于具有event
变量的函数中(直接在大多数浏览器上,在旧IE上是全局的),因此如果将其传递到函数中,您可以在其上调用stopPropagation
(如果它具有该功能)或使用cancelBubble
如果它没有(旧的IE):
function do_something() {
snippet.log("do_something called");
}
function do_something_else(event) {
snippet.log("do_something_else called");
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
&#13;
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<table>
<tbody>
<tr id="x" onclick="do_something()">
<td>Lorem ipsum</td>
<td>Lorem ipsum</td>
<td>Lorem ipsum</td>
<td>
<a href="javascript:;" onclick="do_something_else(event)">CANCEL</a>
</td>
</tr>
</tbody>
</table>
&#13;
如今,使用onXYZ
属性相当老套。相反,请考虑以现代方式连接处理程序,从而为您提供stopPropagation()
函数:
var x = document.getElementById("x");
x.addEventListener("click", do_something, false);
x.querySelector("a").addEventListener("click", function(e) {
e.stopPropagation();
do_something_else();
}, false);
function do_something() {
snippet.log("do_something called");
}
function do_something_else() {
snippet.log("do_something_else called");
}
&#13;
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<table>
<tbody>
<tr id="x">
<td>Lorem ipsum</td>
<td>Lorem ipsum</td>
<td>Lorem ipsum</td>
<td>
<a href="javascript:;">CANCEL</a>
</td>
</tr>
</tbody>
</table>
&#13;
如果您需要支持IE8,this answer为您提供了一个功能来处理IE8不支持addEventListener
的事实(但确实有其特定于Microsoft的前身attachEvent
})。