基于外部JS文件变量条件修改radar_box颜色的代码问题排查
代码失效原因
- 变量取值逻辑错误:declare.js输出的
jsonstr是数组类型,存储的目标值是数组首元素,且带有\r\n换行符,直接和数值100比较存在类型隐式转换风险,结果不可靠 - 样式修改语法错误:原生JS修改元素内联样式时,
style.backgroundColor是可读写属性,不是函数,原写法mmm.style.backgroundColor("red")会直接抛出类型错误,中断脚本执行 - 逻辑未触发:封装的
cond()判断函数从未被调用,判断逻辑完全没有执行入口
修正方案
不需要修改自动生成的declare.js,直接替换页面内的script块逻辑即可,修正后代码如下:
<script> // 等待页面DOM和外部资源加载完成后执行逻辑,避免元素获取失败 window.addEventListener('load', () => { const radarBox = document.getElementById("radar_box"); // 提取数组首元素,去除首尾换行/空白字符后转为浮点数 const currentVal = parseFloat(jsonstr[0].trim()); if (currentVal > 100) { // 给样式属性直接赋值,修正原方法调用的错误写法 radarBox.style.backgroundColor = "red"; } }) </script>
如果你的场景中declare.js会被后端动态刷新、
jsonstr的值会实时变化,可以加轮询定时判断,自动同步背景色状态,参考代码:// 每1秒校验一次数值,同步背景色 setInterval(() => { const radarBox = document.getElementById("radar_box"); const currentVal = parseFloat(jsonstr[0].trim()); radarBox.style.backgroundColor = currentVal > 100 ? "red" : "#7eb6ff"; }, 1000)
内容的提问来源于stack exchange,提问作者mmm
相关产品推荐
相关产品推荐

