javascript - Jquery stopPropagation 不工作,两种情况
问题描述
$(document).on('click', '.outer1', function(){
alert('outer click event');
})
$(document).on('click', '.inner1', function(e){
e.stopPropagation();
alert('inner click event');
})
$('.outer2').on('click', function(){
alert('outer click event');
})
$(document).on('click', '.inner2', function(e){
e.stopPropagation();
alert('inner click event');
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="outer1">
<div class="inner1"> Case 1 - Click Here</div>
</div>
<div class="outer2">
<div class="inner2"> Case 2 - Click Here</div>
</div>
例如,模态窗口:
<div class="outer">
<div class="inner"></div>
</div>
第一种情况:
$(document).on('click', '.outer', function(){
alert('outer click event');
})
$(document).on('click', '.inner', function(e){
e.stopPropagation();
alert('inner click event');
})
第二种情况:
$('.outer').on('click', function(){
alert('outer click event');
})
$(document).on('click', '.inner', function(e){
e.stopPropagation();
alert('inner click event');
})
有什么不同?为什么 stopPropagation() 在第一种情况下工作,但在第二种情况下不工作?
解决方案
后者不起作用,因为事件需要通过 DOM 从 到 冒泡.inner
才能document
被委托的事件处理程序捕获。
.outer
但是,它在冒泡时被事件处理程序捕获,这是在stopPropagation()
调用之前。
推荐阅读
- amazon-web-services - 如何创建 lambda boto3 函数以在另一个 Aws 帐户中创建 cloudformation 堆栈
- powershell - 使用 Read-Host 运行 Compress-Archive
- list - list() 在一行中,不能引入 /newlines
- python - 在 python 中将二进制数据转换为 JSON 时,如何去除多余的行和空格?
- recursion - 递归函数的装配提前返回
- github - 无法在 github 中编辑 Jupyter 文件名
- firefox - Firefox 87:在“输入搜索词”处按 Enter 不会直接进入搜索引擎主页
- javascript - GlideJS - 无法读取未定义的属性“孩子”
- postgresql - PostgreSQL n_distinct 统计设置
- ios - 按日期Swift 5使用compactMap对数组进行排序