本文详解jQuery中处理事件冒泡与表单默认行为的两种核心机制。通过嵌套元素点击示例,演示如何使用stopPropagation()阻止事件向父级传播;结合表单验证场景,对比event.preventDefault()与return false在阻止默认提交行为上的应用,帮助开发者精准控制页面交互逻辑。
理解事件冒泡机制
所谓冒泡事件,是指当用户点击子节点时,该点击动作会沿着DOM树结构向上层传递,依次触发父节点乃至更高层级祖先节点的绑定事件。
在Web开发中,常遇到一个div元素内部嵌套另一个div的情况,且两者均绑定了点击事件。若点击内部div时,仅希望执行内部div的处理逻辑,而不希望触发外部div的响应,此时就需要采用技术手段来阻断这种事件向上冒泡的现象。
为了便于理解,可以将其类比为居家看电视的场景:当你在自己的房间内观看节目时,若不希望声音干扰到隔壁的父母,可以通过躲进被窝或依赖墙体良好的隔音效果来阻隔声音传播,这类似于在代码层面阻止了事件的冒泡传递。
<style>
#content{
width: 140px;
border: 1px solid blue;
}
#msg{
width: 100px;
height: 100px;
margin: 20px;
border: 1px solid red;
}
</style>
<body>
<div id="content">
外层div
<div id="msg">
内层div
</div>
</div>
</body>
显示结果

对应的jQuery代码如下:
使用stopPropagation阻止冒泡
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
// 为内层div绑定click事件
$("#msg").click(function(){
alert("我是小div");
});
// 为外层div元素绑定click事件
$("#content").click(function(){
alert("我是大div");
});
// 为body元素绑定click事件
$("body").click(function(){
alert("我是body");
});
});
</script>
在上述示例中,当点击内部小div时,会依次触发外部大div以及body元素的点击事件;同样,直接点击大div也会触发body的点击事件。
如何防止这种冒泡事件发生呢?
修改如下:
event.stopPropagation(); // 阻止事件冒泡
有时候点击提交按钮会有一些默认事件。比如跳转到别的界面。但是如果没有通过验证的话,就不应该跳转。这时候可以通过设置event.preventDefault(); //阻止默认行为 ( 表单提交 )。
html部分
阻止表单默认提交行为
<body>
<form action="test.html">
用户名:<input type="text" id="username" />
<br/>
<input type="submit" value="提交" id="sub"/>
</form>
</body>

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
$("#sub").click(function(event){
//获取元素的值,val() 方法返回或设置被选元素的值。
var username = $("#username").val();
//判断值是否为空
if(username==""){
//提示信息
//alert("文本框的值不能为空");
$("#msg").html("<p>文本框的值不能为空.</p>");
//阻止默认行为 ( 表单提交 )
event.preventDefault();
}
});
});
</script>
//阻止默认行为 ( 表单提交 ) event.preventDefault(); 还有一种防止默认行为的方法就是return false。效果一样。
代码如下:
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
$("#sub").click(function(event){
//获取元素的值,val() 方法返回或设置被选元素的值。
var username = $("#username").val();
//判断值是否为空
if(username==""){
//提示信息
//alert("文本框的值不能为空");
$("#msg").html("<p>文本框的值不能为空.</p>");
//阻止默认行为 ( 表单提交 )
//event.preventDefault();
return false;
}
});
});
</script>
同理,上面的冒泡事件也可以通过return false来处理。
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
// 为内层div绑定click事件
$("#msg").click(function(event){
alert("我是小div");
//event.stopPropagation(); // 阻止事件冒泡
return false;
});
// 为外层div元素绑定click事件
$("#content").click(function(event){
alert("我是大div");
//event.stopPropagation(); // 阻止事件冒泡
return false;
});
// 为body元素绑定click事件
$("body").click(function(event){
alert("我是body");
//event.stopPropagation(); // 阻止事件冒泡
return false;
});
});
以上就是本文的全部内容,希望对大家有所帮助,同时也希望多多支持本站!