JavaScript实现HTML输入框按值范围动态变色 调用PHP变量异常求解
问题原因
你的代码运行异常的核心是类型不匹配导致的字符串比较错误:
- 你给
min和max赋值时用了引号包裹PHP输出内容,导致两个变量实际是字符串类型,而非数值类型 - input输入框的
value默认获取到的也是字符串类型,JS中字符串比较是逐位对比Unicode编码,不是数值大小对比,比如字符串"9"和"10"比较时,"9"的Unicode编码大于"1",会判定"9" > "10",因此几乎所有输入都会触发异常判断 - 硬编码数值时你没有加引号,变量是数值类型,走的是正常的数值大小比较,因此逻辑正常
解决方案
两步修改即可解决:
- JS接收PHP输出的区间值时,直接转为数值类型,不要加引号包裹
- 输入框取值后也转为数值类型,同时补充非数字输入的异常判断
修正后的JS代码
function checkFilled() { var inputEle = document.getElementById("myinputbox"); // PHP输出直接转为int,不用引号包裹 var min = <?php echo (int)$someVar2; ?>; var max = <?php echo (int)$someVar3; ?>; // 输入值转数值类型 var inputVal = Number(inputEle.value); // 先判断是否是合法数字 if (isNaN(inputVal)) { inputEle.style.backgroundColor = "red"; // 非数字输入标红提示 } else if (inputVal < min || inputVal > max) { inputEle.style.backgroundColor = "yellow"; // 不在区间内标黄 } else { inputEle.style.backgroundColor = ""; // 合法值清空样式 } } checkFilled();
修正后的PHP代码
<?php $someVar2 = 10; $someVar3 = 20; // 可选:把input type改为number,限制用户只能输入数字,减少非法输入 echo '<input type="number" id="myinputbox" onchange="checkFilled();">'; ?>
内容的提问来源于stack exchange,提问作者Enry_94
相关产品推荐
相关产品推荐

