jQuery阻止事件冒泡与默认行为详解

作者:微光

时间:2026-10-27

浏览:475

本文详解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>

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章