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

使用jQuery时事件监听器触发两次的问题求助

解决jQuery下事件监听器触发两次的问题

我之前也碰到过一模一样的情况,这大概率是因为jQuery的$(document).ready()被执行了两次,导致你的事件监听器被重复绑定了两次,每次点击自然就触发两次回调啦。下面给你几个可行的解决方案:

方案一:改用jQuery的事件绑定(推荐)

既然已经引入了jQuery,直接用它的事件绑定方法会更稳妥,jQuery会自动处理重复绑定的问题,代码也更简洁:

jQuery(document).ready(function($){
  function tioOverload(e){
    // 用jQuery的方法获取name属性,比原生写法更简洁
    var path = $(this).attr('name');
    $.ajax({
      url : ajax_object.ajaxurl,
      type : 'post',
      data : { path : path, action : "bpnsc_tio_enable" },
      success : function(data) {
        console.log('Success enabled ' + data);
      },
      error : function(data){
        console.log(data);
        console.log("failed");
      }
    });
  }
  
  // 用jQuery的.on()绑定事件,自动避免重复绑定
  $('.tio-enable').on('click', tioOverload);
});

方案二:给原生事件绑定添加once: true参数

如果你坚持要用原生的addEventListener,可以给绑定方法加上{ once: true }选项,确保事件只触发一次(现代浏览器均支持):

jQuery(document).ready(function(){
  function tioOverload(e){
    var tioButton = e.explicitOriginalTarget;
    var path = tioButton.name;
    jQuery.ajax({
      url : ajax_object.ajaxurl,
      type : 'post',
      data : { path : path, action : "bpnsc_tio_enable" },
      success : function(data) {
        console.log('Success enabled ' + data);
      },
      error : function(data){
        console.log(data);
        console.log("failed");
      }
    });
  }
  var tioEn = document.getElementsByClassName("tio-enable");
  for (var i = 0; i < tioEn.length; i++) {
    // 添加once: true,确保事件仅触发一次
    tioEn[i].addEventListener('click', tioOverload, { once: true });
  }
});

方案三:排查ready重复执行的原因

你可以先在ready函数里加个日志,确认是不是被执行了两次:

jQuery(document).ready(function(){
  console.log('Ready函数执行了!');
  // 剩下的代码...
});

如果控制台输出两次,那说明是ready被重复触发了,大概率是WordPress中jQuery被重复加载,或者主题/插件里有重复的ready调用。你可以检查主题的functions.php或者插件代码,看看是不是多次引入了jQuery,或者有没有重复的$(document).ready()逻辑。

另外,你的PHP代码和HTML部分是没问题的,不用修改~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:49:49