2

我以前从未遇到过这个错误,每当我的 jquery 脚本将数字 9 和 10 或 99 和 100 或 999 和 1000 与 9<10 或 99<100 或 999<1000 进行比较时,我得到一个错误的结果,我得到了错误的结果的真实。如何修复这个 jquery 错误?谢谢你。

查询:

interval = setInterval(function(){
                $.post('help/retrivetable.php', { tableimpulse : sessid } , 
                    function(watchaget) {
                        if (countcom < watchaget)
                        {
                            countcom = watchaget;
                            $.post('help/retrivetable.php', { newtableimpulse : sessid } , 
                                function(getit) {
                                    $("#chat").append("<p id="+countmsg+">"+getit+"</p>");
                                    var scrolldown = $('#chat')[0].scrollHeight;
                                    $('#chat').animate({scrollTop:scrolldown}, 200);
                            }); 
                        }
                }); 
            }, 50); 

当 countcom = 9 和 watchaget = 10 它应该输入 if ,但我认为它们是平等的并且不会进入它。

4

4 回答 4

14

jQuery 是 Javascript。如果是错误,则不是 jQuery-Bug 而是 Javascript-Bug。(编辑:有关于这句话的讨论。阅读评论)

试试这个解决方案:

变量被定义为字符串:

var a = "9";
var b = "10";

此比较将重现您的结果:

if (a < b) ...

当您将两个字符串与运算符进行比较时,<您会得到true第一个操作数是否将在第二个操作数之前按词法排序。你会得到这个结果,因为按照词法顺序,以“1”开头的字符串将排在以“9”开头的字符串之前,无论其长度如何。

试试这个:

if (a-b < 0) ...

该术语a-b强制 javascript 处理数字计算。字符串将被转换为数字。

于 2012-08-25T14:57:26.027 回答
5

您的代码很有可能是在比较字符串而不是数字。

因此尝试使用Number函数 Number(countcom) < Number(watchaget)

于 2012-08-25T14:53:10.327 回答
1

您正在比较两个字符串值。尝试使用将字符串值解析为 intparseInt(value, 10)

在你的情况下,

    if (parseInt(countcom,10) < parseInt(watchaget,10))
    {
       ....
    }

希望能帮助到你。

于 2014-04-09T11:53:01.327 回答
1

另外值得注意的是:

[7,8,9,10].sort() // => [10, 7, 8, 9]

sort 函数默认将元素转换为字符串。为了避免这种情况:

[7,8,9,10].sort(function(a, b) { return a - b; }) // => [7, 8, 9, 10]
于 2012-08-25T15:09:41.910 回答