javascript条件返回意外结果

时间:2011-01-24 22:05:18

标签: javascript jquery html conditional

我正在对输入字段的keyUp事件进行简单的数字比较。出于某种原因,我没有得到预期的结果,我无法弄清楚为什么。 应该发生的是,如果用户输入的数字大于存储在html属性中的数字,则背景应变为红色,否则保持白色。只需输入'9'即可将背景变为红色。 ??

var admin = $('input[name="diskStorage"]').attr('data-adminstorage'); // 2097152000

$('#new-user input[name="diskStorage"]').keyup(function(){

    if(admin < $(this).val())
        $(this).css('background','red');
    else
        $(this).css('background','white');
});

当我调试这些值时,if(2097152000 < 549)返回true。这是html,如果有任何区别:

<form action="administrate.php" method="post" id="new-user">
<table><tbody><tr>
...
  </tr><tr>
    <td>Disk Storage Limit:</td>
    <td>
   <input type="text" data-adminStorage="2097152000" name="diskStorage" value="" /> megaBytes<br />
    <span id="info"></span></td>
...
  </tr></tbody></table>

这是现场:http://jsfiddle.net/JMC_Creative/dqAJj/2/

3 个答案:

答案 0 :(得分:2)

.attr.val()返回String个对象 - 使用一元+运算符将其转换为数值。

var admin = $('input[name="diskStorage"]').attr('data-adminstorage');
admin = +admin;

if(admin < +$(this).val()) {
   //...
}

答案 1 :(得分:0)

尝试在检索管理员值后添加/1,使其成为不是字符串的数字。

var admin = $('input[name="diskStorage"]').attr('data-adminstorage')/1;

编辑:也在this.val上:

$(this).val()/1;

答案 2 :(得分:0)

他们可能都是字符串。您应该首先将它们转换为数字:

var admin = Number($('input[name="diskStorage"]').attr('data-adminstorage')); // 2097152000

$('#new-user input[name="diskStorage"]').keyup(function(){

    if(admin < Number($(this).val()))
        $(this).css('background','red');
    else
        $(this).css('background','white');
});