You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jQuery中禁用重复点击?解决元素切换后重复弹窗问题

解决重复弹窗问题的方案

嘿,我来帮你搞定这个重复弹窗的问题!

问题原因

你现在的代码里,每次点击div1或者div2时,都会给<p>元素新增一个click事件监听器——而不是替换掉之前的。比如先点div1,p上绑定了弹窗"p inside div1"的事件;再点div2,又给p加了弹窗"p inside div2"的事件。这时候点击p,两个事件都会触发,自然就会弹出多次提示框了。

另外还得提个小细节:你代码里div2的<a>标签没闭合,写成了<a href="#">div2</a,得改成<a href="#">div2</a>,不然可能影响页面结构哦。

方案一:绑定新事件前先解绑旧事件

每次给p绑定click事件前,先用off('click')移除之前所有的click事件监听器,这样就不会有重复绑定的问题了:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("p").hide();
  
  $(".div1").on("click",function(){
    $("p").show();
    // 先移除p上所有click事件,再绑定新的
    $("p").off('click').on('click', function(){
      alert("p inside div1");
    });
  });
  
  $(".div2").on("click",function(){
    $("p").show();
    // 同样先解绑再绑定
    $("p").off('click').on('click', function(){
      alert("p inside div2");
    });
  });
});
</script>
</head>
<body>
<div class="div1"><a href="#">div1</a></div>
<div class="div2"><a href="#">div2</a></div>
<p class="para">paragraph</p>
</body>
</html>

方案二:用变量跟踪来源(更高效)

这种方法只给p绑定一次click事件,通过一个变量记录当前是从哪个div触发显示p的,点击p时根据变量判断弹窗内容,性能更好,也避免了重复绑定的问题:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("p").hide();
  let activeSource = ''; // 用来记录当前激活的来源div
  
  // 只给p绑定一次点击事件
  $("p").on('click', function(){
    if(activeSource === 'div1'){
      alert("p inside div1");
    } else if(activeSource === 'div2'){
      alert("p inside div2");
    }
  });
  
  $(".div1").on("click",function(){
    $("p").show();
    activeSource = 'div1'; // 更新来源为div1
  });
  
  $(".div2").on("click",function(){
    $("p").show();
    activeSource = 'div2'; // 更新来源为div2
  });
});
</script>
</head>
<body>
<div class="div1"><a href="#">div1</a></div>
<div class="div2"><a href="#">div2</a></div>
<p class="para">paragraph</p>
</body>
</html>

两种方案都能解决你的问题,方案二更推荐,因为它不需要频繁地绑定和解绑事件,代码逻辑也更清晰。

内容的提问来源于stack exchange,提问作者A prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:00:57