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
相关产品推荐
相关产品推荐

