【发布时间】:2013-04-20 11:47:46
【问题描述】:
想象一下这样的事情。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Testing event bubbling</title>
<script src="js/jquery/jquery-2.0.0.js"></script>
<script>
$(document).on('click', 'div', function(e) {
e.preventDefault();
console.log('Clicked');
return true;
});
$(document).on('submit', 'form', function(e) {
e.preventDefault();
console.log('Submitted');
});
</script>
</head>
<body>
<form>
<div><div><div>
Click this.
<input type="submit">
</div></div></div>
</form>
</body>
</html>
现在,当您单击提交按钮时,单击事件被捕获并向下传播到所有 DIV,您会看到 'Clicked' 三次。我的特殊之处在于,这似乎跳过了表单提交事件。如果我删除 Click 绑定,则提交事件会正确触发。有没有在表单上手动触发 submit() 的方法?我知道我可以使点击事件更具体,因此它不适用于提交按钮,但是......我有一个奇怪的用例。
我在这里做错了什么?如果触发了一个事件,是否意味着所有其他优先级较低的事件都将被忽略?
【问题讨论】:
-
你为什么在点击时打电话给
e.preventDefault() -
您正在为所有
DIVs 绑定点击事件。所以它显示了3次。按钮位于 # div 内。所以会产生3次点击事件
标签: javascript jquery-events event-bubbling