JavaScript parseInt-error

时间:2015-01-06 14:01:35

标签: javascript parseint

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

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

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

4 个答案:

答案 0 :(得分:1)

你真的想要为parseInt设置基数(第二个参数)取决于字符串/值,它可以解释为八位字节,二进制,十六进制等。

所以转到if (form.width.value && parseInt(form.width.value,10)>0){...}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

请注意,不要将parseInt视为理所当然。之前已经在答案中提到过,但我会详细说明一下:

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

  

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

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

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

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

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

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

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

所以简而言之 - 确保你传递的参数被消毒为基数10十进制数(我认为你不想要12,3作为你的宽度)或甚至更好地确保它在你的状态:

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