javascript - 为什么 `event.preventDefault()` 不适用于两个嵌套的 div?

标签 javascript html events

function clickOut(event) {
  event.preventDefault();
  alert('click on out');
}

function clickIn(event) {
  event.preventDefault();
  alert('click on in');
}
#out {
  width: 100px;
  height: 100px;
  border: 1px solid red;
}
#in {
  width: 50px;
  height: 50px;
  border: 1px solid blue;
}
<div id="out" onclick="clickOut(event)">
  <div id="in" onclick="clickIn(event)">
  </div>
</div>

现场演示:http://jsbin.com/qomuteyoke/1/edit?html,css,js,output

为什么当我点击内部 div 时,仍然弹出两个警报,即使我已经调用了 event.preventDefault()?第一个是click on in,第二个是click on out?

最佳答案

尝试使用 event.stopPropagation():

jQuery 定义:

Description: Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.

MDN 定义:

Prevents further propagation of the current event.

function clickIn(event) {
    event.stopPropagation();
    alert('click on in');
}

关于javascript - 为什么 `event.preventDefault()` 不适用于两个嵌套的 div?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28745862/

相关文章:

c# - WebControl 和 CompositeControl 之间的区别?

javascript - 在javascript中添加两个 float

javascript - 如何使用默认选择下拉菜单关闭自定义 jquery 下拉菜单

javascript - 当不同的 div 展开时折叠所有其他 div

javascript - AngularJS 或 CSS - 具有多行和第一列的表的问题已修复

html - 如何使旋转木马移动响应并使图片适合。轮播大小

java - 用于在 HTML5 中绘制图形(不是图表,而是 DAG)的 JSF

.net - 使用 FakeItEasy 断言已引发事件

javascript - HTML选择永久显示值?

c# - 委托(delegate)可以更改委托(delegate)链中的参数吗? (C#)