jQuery阻止事件冒泡与默认行为详解
本文详解jQuery中阻止事件冒泡与默认行为的三种方法。通过HTML嵌套示例展示冒泡现象,并分别使用event.stopPropagation()、event.preventDefault()及return false进行拦截。涵盖点击事件与表单提交场景,提供完整代码对比,帮助开发者精准控制事件流。
HTML结构与事件冒泡现象
首先查看HTML结构部分:
具体代码实现如下:
<body>
<div id="content">
外层div元素
<span>内层span元素</span>
外层div元素
</div>
<div id="msg"></div>
</body>
对应的jQuery脚本代码如下:
具体代码实现如下:
<script type="text/javascript">
$(function(){
// 为span元素绑定click事件
$('span').bind("click",function(){
var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";//获取html信息
$('#msg').html(txt);// 设置html信息
});
// 为div元素绑定click事件
$('#content').bind("click",function(){
var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
$('#msg').html(txt);
});
// 为body元素绑定click事件
$(\"body\").bind("click",function(){
var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
$('#msg').html(txt);
});
})
</script>
使用stopPropagation阻止冒泡
当点击span时,会触发div与body 的点击事件。点击div时会触发body的点击事件。
如何防止这种冒泡事件发生呢?
修改如下:
具体代码实现如下:
<script type="text/javascript">
$(function(){
// 为span元素绑定click事件
$('span').bind("click",function(event){
var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
$('#msg').html(txt);
event.stopPropagation(); // 阻止事件冒泡
});
// 为div元素绑定click事件
$('#content').bind("click",function(event){
var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
$('#msg').html(txt);
event.stopPropagation(); // 阻止事件冒泡
});
// 为body元素绑定click事件
$(\"body\").bind("click",function(){
var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
$('#msg').html(txt);
});
})
</script>
event.stopPropagation(); // 阻止事件冒泡
使用preventDefault阻止默认行为
有时候点击提交按钮会有一些默认事件。比如跳转到别的界面。但是如果没有通过验证的话,就不应该跳转。这时候可以通过设置event.preventDefault(); //阻止默认行为 ( 表单提交 )。
下面是案例:
具体代码实现如下:
<script type="text/javascript">
$(function(){
$(\"#sub\").bind("click",function(event){
var username = $(\"#username\").val(); //获取元素的值,val() 方法返回或设置被选元素的值。
if(username==\"\"){ //判断值是否为空
$(\"#msg\").html("<p>文本框的值不能为空.</p>"); //提示信息
event.preventDefault(); //阻止默认行为 ( 表单提交 )
}
})
})
</script>
html部分:
具体代码实现如下:
<body>
<form action="test.html">
用户名:<input type="text" id="username" />
<br/>
<input type="submit" value="提交" id="sub"/>
</form>
<div id="msg"></div>
</body>
使用return false处理事件
还有一种防止默认行为的方法就是return false。效果一样。
具体代码实现如下:
具体代码实现如下:
<script type="text/javascript">
$(function(){
$(\"#sub\").bind("click",function(event){
var username = $(\"#username\").val(); //获取元素的值
if(username==\"\"){ //判断值是否为空
$(\"#msg\").html("<p>文本框的值不能为空.</p>"); //提示信息
return false;
}
})
})
</script>
同理,上面的冒泡事件也可以通过return false来处理。
具体代码实现如下:
<script type="text/javascript">
$(function(){
// 为span元素绑定click事件
$('span').bind("click",function(event){
var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
$('#msg').html(txt);
return false;
});
// 为div元素绑定click事件
$('#content').bind("click",function(event){
var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
$('#msg').html(txt);
return false;
});
// 为body元素绑定click事件
$(\"body\").bind("click",function(){
var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
$('#msg').html(txt);
});
})
</script>JavaScript零基础入门:从环境搭建到运行第一段代码
2026-11-05 15:29:58
HTML链接中javascript:void(0)的作用及现代替代方案
2026-11-05 10:07:47
在线调试 JS 时怎么引入 jQuery 或 Vue 等第三方库
2026-11-05 08:53:56
原生JavaScript实现简易颜色选择器原理与代码
2026-11-03 23:22:19
JS原生表单序列化:FormData与URLSearchParams用法详解
2026-11-03 23:13:21
