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

JavaScript函数变量存储与重复绑定click事件导致多次弹窗问题

问题成因

你遇到的重复弹窗问题由两个特性共同导致:

  1. jQuery的.click()方法绑定事件为追加逻辑而非覆盖:每次调用testFunction时,都会给#alert-btn新增一个独立的点击事件处理函数,之前绑定的逻辑不会被清空。
  2. 闭包特性:每个新增的点击处理函数都会捕获当时传入的cust_num值并独立保留,不会被后续新传入的值覆盖。你点击过多少次submit类按钮,就会给alert按钮绑定多少个事件处理函数,点击alert按钮时所有函数会依次触发,就会出现连续弹窗的情况。

修复方案

方案1:绑定前清空旧事件(改动最小)

修改testFunction,每次绑定新事件前先调用.off('click')移除之前绑定的所有点击事件,确保alert按钮始终只有一个最新的事件逻辑:

function testFunction(cust_num) {
  $("#alert-btn").off('click').click(function() {
    alert(cust_num);
  })
}

方案2:仅绑定一次alert事件,用变量存储最新值(性能更优)

不用每次点击submit都重新绑定事件,直接用一个变量存储最新的编号,alert按钮的事件全局只绑定一次,永远读取最新值即可:

// 存储最新的客户编号
let latestCustNum = null;

$(".submit-btn1").click(function() {
  latestCustNum = parseInt(this.id.replace('test-button-', ''), 10);
})
$(".submit-btn2").click(function() {
  latestCustNum = parseInt(this.id.replace('test-button-', ''), 10);
})

// alert按钮仅绑定一次事件
$("#alert-btn").click(function() {
  if (latestCustNum) {
    alert(latestCustNum);
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:08