2010-05-29 115 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

相關問題