简易反应测试器中JavaScript点击计数器失效问题求助
简易反应测试器中JavaScript点击计数器失效问题求助
嘿,我帮你找出计数器失效的问题啦!主要是几个小细节没处理对,咱们一个个梳理:
错误使用了
<a>标签的value属性
你用来显示计数的是<a>标签,但这个标签本身并没有value属性,所以document.getElementById("count").value拿到的是undefined,后续的递增操作自然没法正常工作。要获取/设置标签里的文本内容,应该用.textContent或者.innerText。字符串与数字的类型混淆
就算你能拿到标签里的文本(比如初始的"0"),它也是字符串类型,直接做+1操作会变成字符串拼接(比如"0"+1会得到"01"),而不是你想要的数字递增。需要先把字符串转成数字再计算。没必要每次从DOM读取计数器值
你已经在外部声明了var counter = 0;,完全可以直接维护这个变量,不用每次调用函数都从DOM里重新读取,这样逻辑更清晰,也能避免DOM操作带来的潜在问题。
修改后的代码示例
HTML部分(把<a>换成更语义化的<span>,因为这里不需要链接功能):
<font size="10"><span id="count" style="position: relative; left: 48vw; top: 25vh">0</span></font>
JavaScript部分:
var counter = 0; function reaction() { // 直接递增外部维护的counter变量 counter += 1; // 将更新后的数值设置到span标签的文本中 document.getElementById("count").textContent = counter; var margin = document.querySelector('#screen_reaction'); top_margin = (Math.random() * 97); left_margin = (Math.random() * 95); margin.style.top = `${top_margin}%` margin.style.left = `${left_margin}%` }
现在每次点击红色方块时,计数器就会正常递增啦,红色方块的随机位置功能也不受影响~
备注:内容来源于stack exchange,提问作者Simpractor
相关产品推荐
相关产品推荐

