JavaScript parseInt-error

JavaScript parseInt-error

本文关键字:parseInt-error JavaScript      更新时间:2023-09-26

我有一个带有几个输入字段的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
}

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

所以把它带到一个if (form.width.value && parseInt(form.width.value,10)>0){...}.

请注意,不要认为parseInt是理所当然的。之前在回答中已经提到过,但我会更详细地阐述它:

以下是 parseInt 的简短但更详细的定义:

parseInt(string, radix) 函数分析一个字符串并返回一个整数。

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

如果省略基数参数,JavaScript 将假定以下内容

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

仅返回字符串中的第一个数字

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

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

所以简而言之 - 确保您传递的参数被灭菌为基数 10 十进制数(我认为您不想将 12,3 作为宽度),甚至更好地确保它处于您的状态,例如:

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

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

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