添加点击+1美元按钮后,带10秒计时器的25美元领取按钮失效问题排查
问题根源分析
你遇到的问题核心是新增的+1按钮代码破坏了原有计数器的工作逻辑,具体有两个关键错误:
1. 错误修改了计数器元素的ID
在新增的代码段里有这一行完全错误的代码:
clicks.id = document.querySelector('counter');
document.querySelector('counter')是尝试选择一个名为<counter>的HTML标签,但你的页面里根本不存在这个标签,所以它返回null。- 你把原本ID为
counter的元素的ID设置成了null,这直接导致原jQuery代码里的$('#counter')再也找不到这个元素——getCounter()和setCounter()函数彻底失效,25美元按钮自然无法正常工作。
2. 计数器数据不同步
新增的Counter函数用独立变量a维护计数,而原25美元按钮是基于#counter元素的内容读取和更新计数的,两者数据源完全脱节,就算ID没被修改,也会出现计数不一致的问题。
修复方案
我们需要修正这两个问题,让两个按钮共享同一个计数数据源,同时保留各自功能:
修复后的完整JavaScript代码
// +1美元按钮部分 const addOneButton = document.querySelector('.addOneButton'); addOneButton.onclick = function() { // 直接使用计数器元素的内容作为数据源,和原按钮逻辑对齐 const currentCount = parseInt(document.getElementById('counter').textContent); document.getElementById('counter').textContent = currentCount + 1; }; // 原25美元计时器按钮部分 $('#btn').prop('disabled',true); startCountDown(); function getCounter(){ return parseInt($('#counter').html()); } function setCounter(count) { $('#counter').html(count); } $("#btn").click(function() { setCounter(getCounter()+25); $('#btn').prop('disabled',true); startCountDown(); }); function startCountDown() { var minutes = 0, seconds = 10; $("#countdown").html(`${minutes}:${seconds}`); var count = setInterval(function() { const secNum = parseInt(seconds); // 简化计时结束的判断逻辑,避免字符串转数字的歧义 if (secNum <= 0 ) { $("#countdown").html("Collect"); clearInterval(count); $('#btn').prop('disabled',false); } else { // 先计算新秒数再格式化显示,解决初始显示延迟问题 const newSec = secNum - 1; seconds = newSec < 10 ? "0" + newSec : newSec; $("#countdown").html(`${minutes}:${seconds}`); } }, 1000); }
修复说明
- 移除错误的ID修改代码:删掉了
clicks.id = document.querySelector('counter');这行无效且破坏原有功能的代码,让#counter元素的ID保持正常。 - 统一计数数据源:+1按钮现在直接读取和修改
#counter元素的内容,和原25美元按钮共享同一个数据源,保证计数完全同步。 - 优化计时逻辑:修正了原计时函数里的小瑕疵,让秒数减少和显示的逻辑更顺畅,避免了初始显示10秒后延迟变9秒的问题。
现在两个按钮都能正常工作:点击+1按钮实时增加1美元,25美元按钮在计时结束后点击增加25美元,同时进入10秒冷却,冷却期间按钮禁用。
内容的提问来源于stack exchange,提问作者JustAProgrammer
相关产品推荐
相关产品推荐

