ID为two的文本框无法显示var c值,显示undefined,求技术支援
解决文本框显示undefined的质数判断问题
问题根源
- 循环未执行导致变量未赋值:当输入数字为2时,循环条件
i <= num - 1等价于i <= 1,循环直接跳过,c从未被赋值,最终显示undefined。 - 结果赋值时机错误:你把
c的赋值放在循环内部,此时循环还未完成,flag的状态并未确定最终结果,而且重复赋值完全冗余。 - 缺少边界值处理:未覆盖输入数字小于2的场景(比如1、0、负数),这类数字本身就不是质数。
修正后的代码
质数判断函数
function prime_number() { var num, i, c, flag = true; num = parseInt(document.getElementById("one").value); // 处理小于2的数字,直接判定非质数 if (num < 2) { flag = false; } else { // 循环优化:只需遍历到num的平方根,提升效率 for (i = 2; i <= Math.sqrt(num); i++) { if (num % i === 0) { flag = false; break; } } } // 循环结束后再赋值结果 c = flag ? "It is a prime number" : "It is not a prime number"; document.getElementById("two").value = c; }
表单代码(无需修改)
<form> <input type="number" id="one" name="one" placeholder="Enter a positive number"><br> <input type="text" id="two" name="two"><br> <input type="button" id="submit" name="submit" value="CHECK" onclick="prime_number()"><br> </form>
关键改动说明
- 把结果赋值逻辑移到循环结束后,确保使用
flag的最终状态生成结果。 - 增加对
num < 2的判断,覆盖所有非质数的边界场景。 - 优化循环条件为
i <= Math.sqrt(num),减少不必要的循环次数(原逻辑也能运行,但效率更低)。
内容的提问来源于stack exchange,提问作者Anurodh Kumar
相关产品推荐
相关产品推荐

