2012年12月12日 星期三

[JavaScript] input type='text' 取值比大小

  今天在開發 javascript 的時候,發現從 HTML 取得的 input type='text' 值在進行「比大小」的時候會發生奇怪的錯誤。我們來看看下面範例:

<script type='text/javascript'>
    function form_check(){
        var a = example.input_value.value;
        var b = example.compare_value.value;

        if (a > b){alert("a is greater than b.");}
    }
</script>

<form name='example' ... onsubmit='return form_check();'>
    <input type='text' name='input_value' />
    <input type='text' name='compare_value' />
    <input type='submit' ... value='Submit' />

  如果今天在瀏覽器上輸入 a 跟 b 的值之後並點選 submit,此時 javascript function 會進行 a, b 值的比較;如果 a 大於 b,會跳出 a 大於 b 的訊息。

只不過,神奇的錯誤發生了!!!

1 ) 若輸入 a = 80, b = 50,則順利跳出 a 大於 b 的訊息

2 ) 若輸入 a = 100, b = 50,則不會跳出 a 大於 b 的訊息

  經過谷哥大神的開示,我發現,每次輸入 text 的直接為 string,並非我們所想像的 integer。因此, 函式 form_check 進行的比較是字串大小的比較,而非「數值」大小的比較。如果要進行數值大小的比較,必須進行下列的修正:


<script type='text/javascript'>
    function form_check(){
        var a = example.input_value.value;
        var b = example.compare_value.value;

        if (parseInt(a) > parseInt(b)){ alert("a is greater than b."); }
    }
</script>

如此一來,我們將順利比較輸入值的大小!

P.S. 如進行一般數值大小的比較,可使用 parseFloat( )。