jQuery中阻止事件冒泡与默认行为的两种方法

作者:白露

时间:2026-10-30

浏览:89

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

以上就是本文的全部内容,希望对大家有所帮助,同时也希望多多支持本站!

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章