如何根据下拉框选中项设置对应分值(不修改原有option值)
解决方案
首先,你现有脚本的问题在于字符串比较时没有给Verbal Warning加引号,而且变量value未声明(会污染全局作用域)。先修复这个基础版本:
function setValue(){ // 声明变量,避免全局污染 const selectedAction = document.getElementById('dis_value').value; let deductScore = 0; if (selectedAction === "Verbal Warning") { deductScore = 10; } else if (selectedAction === "Written Warning") { deductScore = 20; } else if (selectedAction === "Demotion") { deductScore = 30; } else if (selectedAction === "Suspension") { deductScore = 50; } // 这里可将deductScore用于扣除总评分的逻辑 alert(`当前惩戒对应扣分:${deductScore}`); }
如果后续要新增惩戒方式,上面的if-else会越来越繁琐,更推荐用映射对象管理惩戒与分值的对应关系,代码更简洁易维护:
// 定义惩戒方式与分值的映射表 const actionScoreMap = { "Verbal Warning": 10, "Written Warning": 20, "Demotion": 30, "Suspension": 50 }; function setValue(){ const selectedAction = document.getElementById('dis_value').value; // 从映射表中获取对应分值,默认0(无匹配项时) const deductScore = actionScoreMap[selectedAction] || 0; // 示例:假设总评分元素id为totalScore,执行扣除逻辑 // const totalScoreEl = document.getElementById('totalScore'); // totalScoreEl.textContent = parseInt(totalScoreEl.textContent) - deductScore; alert(`当前惩戒对应扣分:${deductScore}`); }
关键说明
- 无需修改原有
<option>的value属性,完全通过JS映射关系实现分值匹配 - 映射对象的方式后续新增惩戒时,只需在
actionScoreMap里添加键值对,无需修改逻辑代码 - 变量声明使用
const/let,避免全局变量污染
内容的提问来源于stack exchange,提问作者Kez XI
相关产品推荐
相关产品推荐

