【问题标题】:Javascript number comparison failsJavascript数字比较失败
【发布时间】:2013-04-28 02:44:00
【问题描述】:

我试图了解我的错误在哪里,因为 JS 不可能在数学上失败!

在 HTML 表单上,我有一个选择和 9 个文本输入。 然后,在 JS 上我比较输入的文本。

我的问题如下: 如果我写上

new_da3 = 1400
new_a3 = 1900

JS 会说 ok3。

如果我写上

new_da3 = 1900
new_a3 = 1400

JS 会拒绝!

但是如果我写在上面

new_da3 = 1500
new_a3 = 800

JS 会说 ok3!

为什么? 1500不是比800大吗?

谢谢!

HTML:

 <form>
 <select id="new_nrp" onchange="selNrP(this.value);" style="background-color:#F00; color:#FFF">
            <option value="" selected="selected"></option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>

    <?php
    for($i=1; $i<=3; $i++){
        print '<input type="text" size="5" maxlength="5" id="new_da'.$i.'">
               <input type="text" size="5" maxlength="5" id="new_a'.$i.'">';

    }
    ?>

    <input type="submit" class="buttongreen" onClick="test()" value="Try the test function!">
</form>

JS

function test(){
    var new_da1 = document.getElementById('new_da1').value
var new_a1 = document.getElementById('new_a1').value
var new_da2 = document.getElementById('new_da2').value
var new_a2 = document.getElementById('new_a2').value
var new_da3 = document.getElementById('new_da3').value
var new_a3 = document.getElementById('new_a3').value

var new_nrp = document.getElementById('new_nrp').value

switch(new_nrp){
    case '3':
        if(new_a2 < new_da3 && new_da3 <= new_a3){
            alert('ok3')
        } else {
            alert('no3')
            return
        }
    case '2':
        if(new_a1 < new_da2 && new_da2 <= new_a2){
            alert('ok2')
        } else {
            alert('no2')
            return
        }
    case '1':
        if(new_da1 <= new_a1){
            alert('ok1')
        } else {
            alert('no1')
            return
        }
    break;
    default:
        alert("Why are you here?");
        return;
}

}

【问题讨论】:

    标签: javascript forms


    【解决方案1】:

    因为您要比较的是字符串,而不是整数。使用parseInt 将您的值显式转换为整数。

    这基本上是您正在做的事情:jsFiddle example

    要进行转换,请将变量更改为:

    var new_da1 = parseInt( document.getElementById('new_da1').value, 10);
    

    (假设它们都是整数)

    【讨论】:

      【解决方案2】:

      您必须在比较之前解析值

      用户 parseInt 转换为整数数值,或 parseFloat 转换为浮点值

      parseInt Help parseFloat Help

      【讨论】:

      • 两者之间哪个“更好”?
      • 两者都不是更好,它们有不同的用途。
      猜你喜欢
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2016-07-05
      相关资源
      最近更新 更多