JS问题:使用Switch/IF语句修改滑块值失效排查
问题解答:滑块值对应指定年份显示异常
嘿,完全不用不好意思问基础问题,咱们都是从新手阶段过来的😎
首先回答你的核心问题:Switch语句完全适用于这个场景,问题出在代码的最后一行!
你看,在switch语句里已经根据滑块的不同值设置了output.innerHTML为对应的年份,但紧接着你又写了:
output.innerHTML = this.value;
这行代码直接把switch刚设置好的年份给覆盖成了滑块的原始数值(1-6),所以移动滑块后只会显示1-6,而不是你想要的对应年份。
修正后的代码(保留switch写法)
只需要把最后那行多余的覆盖代码删掉就行:
var slider = document.getElementById("myRange"); var output = document.getElementById("demo"); output.innerHTML = 133; // 默认显示对应值 slider.oninput = function() { switch (this.value) { case "1": // 注意:input的value是字符串类型,用字符串匹配更严谨 output.innerHTML = 133; break; case "2": output.innerHTML = 88; break; case "3": output.innerHTML = 60; break; case "4": output.innerHTML = 44; break; case "5": output.innerHTML = 36; break; case "6": output.innerHTML = 26; break; default: output.innerHTML = 133; } // 删掉这行:output.innerHTML = this.value; }
补充个小细节:滑块input的value属性是字符串类型,所以switch里的case用字符串(比如"1")匹配会更严谨,避免潜在的类型匹配问题。
更简洁的替代写法(推荐)
如果觉得switch写起来有点繁琐,可以用对象映射的方式,代码会更简洁易维护:
var slider = document.getElementById("myRange"); var output = document.getElementById("demo"); // 建立滑块值和对应年份的映射表 const yearMap = { "1": 133, "2": 88, "3": 60, "4": 44, "5": 36, "6": 26 }; // 初始显示默认值 output.innerHTML = yearMap[slider.value]; slider.oninput = function() { // 从映射表中取值,取不到就用默认的133 output.innerHTML = yearMap[this.value] || 133; }
这种方式后续要修改对应关系或者新增值的时候,直接修改yearMap对象就行,比修改switch语句更方便。
内容的提问来源于stack exchange,提问作者Andy McCully
相关产品推荐
相关产品推荐

