isNaN判断异常:输入数字仍触发alert弹窗问题求助
问题原因与修复方案
你的问题出在直接把DOM元素传给了isNaN(),而不是读取输入框的实际输入值。
increaseValue是通过document.getElementById获取到的<input>元素对象,当你把这个对象传给isNaN()时,JS会尝试把它转换为数字,而DOM元素转数字的结果永远是NaN,所以不管输入框里填了什么,if(isNaN(increaseValue))的条件永远成立,弹窗就会一直触发。
修复代码
把判断逻辑改成读取输入框的value属性,并且建议先把字符串转成数字再做校验:
const increaseValue = document.getElementById('positive'); const enter = document.getElementById('enter-value'); function useInput(){ enter.addEventListener('click', function(){ // 获取输入框的值并转为数字 const inputValue = Number(increaseValue.value); // 判断是否为有效数字,同时处理空输入的情况 if(isNaN(inputValue) || increaseValue.value.trim() === ''){ alert("Your input was not a number! Try again."); } }) } useInput();
额外说明
因为你的输入框是type="number",浏览器本身会限制用户输入非数字内容,但如果用户手动清空输入框或者输入了符合格式但无意义的内容(比如只输入了负号),上面的代码可以覆盖这些场景。
内容的提问来源于stack exchange,提问作者Ben Leevey
相关产品推荐
相关产品推荐

