JavaScript parseInt 错误

JavaScript parseInt-error

我有一个带有几个输入字段的 HTML 表单,我想检查用户在文本字段中输入的是数字,而不是字符串。我试过这个:

if(parseInt(form.width.value) < 0) {
    $("#width").attr('placeholder', 'Please input the desired width of the table.');
}

我试过负数、正数、文本,但没有任何反应。但是无论我尝试什么,if 语句中的代码都不会被执行。我只是想检查用户是否输入了正整数。

要检查值是否为数字,请使用 isNaN:

if(!isNaN(form.width.value) && parseInt(form.width.value) > 0) {
    // form.width.value is a number bigger than 0
}

您需要清除输入的值,否则不会显示占位符。

if (parseInt(form.width.value) < 0) {
  $('#width')
    .attr('placeholder', 'Please input the desired width of the table.')
    .val('');
}

您真的会想要根据 string/value 为 parseInt 设置基数(第二个参数),它可以解释为八位字节、二进制、十六进制等。

所以让它成为 if (form.width.value && parseInt(form.width.value,10)>0){...}

提醒一句,不要想当然地使用 parseInt。之前的回答中已经提到过,但我会详细说明一下:

这里是 parseInt 的简短但更详细的定义:

The parseInt(string, radix) function parses a string and returns an integer.

radix 参数(作为整数)用于指定要使用的数字系统(例如二进制、三进制、八进制、十进制、十六进制等)。

如果省略 radix 参数,JavaScript 假设如下

  • 如果字符串以“0x”开头,则基数为 16(十六进制)
  • 如果字符串以“0”开头,则基数为 8(八进制)。这个功能是 弃用 如果字符串以任何其他值开头,则基数为 10 (十进制)

只有字符串中的第一个数字是 returned!

如果第一个字符无法转换为数字,parseInt() returns NaN。但是,如果可以,它将 return 一个数字。有时这不是您所期望的!

由于 ECMAScript 的旧版本,较旧的浏览器将导致 parseInt("010") 为 8,(比 ECMAScript 5 更旧,当字符串以“0”开头时,默认使用八进制基数 (8)。从 ECMAScript 5 开始,默认值为十进制基数 (10)。

所以简而言之 - 确保你传递的参数被消毒为以 10 为底的十进制数(我认为你不想要 12,3 作为你的宽度)或者更好地确保它符合你的条件:

if ( !isNan(form.with.value) && parseInt(form.width.value, 10) > 0 )