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

jQuery点击切换问题显示的按钮仅生效一次,求排查问题

问题分析与解决方案

核心问题

你这段代码的问题根本不是++cont或cont++的写法,也不需要把cont放到函数内部——真正的问题是:

  • 页面加载时,cont的值是0,你只给.boton_pregunta0这个按钮绑定了点击事件
  • 点击后cont会自增,但后续的.boton_pregunta1、.boton_pregunta2等按钮,从来没被绑定过点击事件,所以点击它们自然没反应

修复方案

有两种常用的修复思路:

思路1:事件委托(推荐)

利用jQuery的事件委托机制,给父元素绑定事件,这样不管后续按钮是一开始就存在还是动态生成的,都能触发事件:

let cont = 0;

// 假设所有.boton_preguntaX按钮都在一个父容器里,比如#preguntas-container
$('#preguntas-container').on('click', '[class^="boton_pregunta"]', function() {
  $('#pregunta' + cont).fadeOut(1000);
  cont++;
  setTimeout(function() { 
    $('#pregunta' + cont).fadeIn(1000); 
  }, 1000);
});

如果没有明确的父容器,也可以用document作为委托对象,但优先用更接近的父元素,性能更好。

思路2:每次点击后重新绑定事件

这种方式需要在每次完成切换后,给下一个按钮绑定点击事件,但不如事件委托优雅:

let cont = 0;

function bindNextButton() {
  $('.boton_pregunta' + cont).click(function() {
    $('#pregunta' + cont).fadeOut(1000);
    cont++;
    setTimeout(function() { 
      $('#pregunta' + cont).fadeIn(1000); 
      // 切换完成后给下一个按钮绑定事件
      bindNextButton();
    }, 1000);
    // 解除当前按钮的绑定,避免重复触发
    $(this).off('click');
  });
}

// 初始化绑定第一个按钮
bindNextButton();

补充说明

  • ++cont和cont++在你这个场景下没有区别——因为你是单独用这条语句自增,没有在表达式里直接使用它的值,两种写法效果完全一样。
  • cont变量需要放在函数外部,这样才能在每次点击时保留自增后的状态,如果放到函数内部,每次点击都会重置为0,完全达不到切换问题的效果。

内容的提问来源于stack exchange,提问作者Óscar Rabadán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:15:40