2010-05-29 52 views
3

我有以下脚本jquery:我必须使用parseInt()处理数字,为什么?

<select id="select1"> 
     <option value="1">1day</option> 
     <option value="2">2day</option> 
     <option value="3">3day</option> 
    </select> 

    <select id="select2"> 
     <option value="1">1day</option> 
     <option value="2">2day</option> 
     <option value="3">3day</option> 
    </select> 

和jQuery

$("#select2").change(function() { 
      var max_value = parseInt($("#select2 :selected").val()); 
      var min_value = parseInt($("#select1 :selected").val()); 
      if(max_value < min_value) 
      { 
       $("#select1").val($(this).val()); 
      } 
     }); 

,现在,我也看不明白 - 如果选项元素的值是整数,所以我必须使用parseInt函数( )?在某些情况下,如果没有parseInt(),它将不起作用。

感谢

+1

顺便说一句,在这里使用'parseInt'。 ['+'会做得很好](http://stackoverflow.com/questions/61088/hidden-features-of-javascript/2243631#2243631),例如'var max_value = + $(“#select2:selected”)。val();'。 – 2010-05-29 18:51:20

+0

@安迪E的头 - ... O_O。我从来不知道这个伎俩!我无法确定它是否比明确的转换更漂亮或更丑陋,但当我处理变量名称或对象属性而不是方法调用时,我可能会采用它。 – Matchu 2010-05-29 18:54:12

+0

@Matchu:这是我最喜欢的关于JS的东西之一,保存所有这些字节;-) – 2010-05-30 10:12:08

回答

5

表单字段值始终以字符串形式存储。它们是否看起来像整数是无关的;他们是字符串。你需要将它们转换为整数,然后再对其进行处理:)

1

值总是整数这样,你把号码存在,而不是事实,谁也不知道,什么是你的唯一选择。

+0

但是当它比较两个数字时,有什么问题? – Simon 2010-05-29 18:39:07

+0

这里是问题:http://stackoverflow.com/questions/61088/hidden-features-of-javascript/61545#61545 – 2010-05-29 18:41:07

+1

如果你真的想知道,看“JavaScript:好的部分”将帮助你得到在比较以及几乎所有常见错误之前不转换为适当类型的问题存在:http://www.youtube.com/watch?v=hQVTIJBZook – 2010-05-29 18:42:43

1

jQuery的val()函数总是返回一个字符串。在许多情况下,你可以混合使用数字和字符串(例如算术),当比较两个字符串变量时,javascript将执行字符串比较,而不是数字比较(这是预期的)

+0

好的,在这种情况下,为什么以下是错误的?如果(14> 12)...,即使它将数字视为字符串? – Simon 2010-05-29 18:43:40

+0

@Syom:你确定表单的值是你认为的吗?我的Google Chrome Javascript控制台说''14“>”12“'是真的。 – Matchu 2010-05-29 18:55:28

+0

'(14> 12)'将返回true。 '(“14”>“12”)'也会返回true,但出于不同的原因。 OTOH,'(“15”>“124”)'也会返回true。 – 2010-05-29 18:58:55

相关问题