2

私はこれまでこのバグに遭遇したことがありません。jqueryスクリプトが数値9と10または99と100または999と1000を9<10または99<100または999<1000と比較するたびに、誤った結果が得られますが、代わりにfalseになります本当の。このjqueryのバグを修正するにはどうすればよいですか?ありがとうございました。

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) ...

2つの文字列を演算子と比較する<true、最初のオペランドが2番目のオペランドの前に字句的にソートされるかどうかがわかります。辞書式順序では、長さに関係なく、「1」で始まる文字列が「9」で始まる文字列の前にソートされるため、この結果が得られます。

代わりにこれを試してください:

if (a-b < 0) ...

この用語a-bは、javascriptに数値計算の処理を強制します。文字列は数値に変換されます。

于 2012-08-25T14:57:26.027 に答える
5

コードが数値ではなく文字列を比較している可能性はかなりあります。

このように数値関数 を使用してみてくださいNumber(countcom) < Number(watchaget)

于 2012-08-25T14:53:10.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 に答える
1

2つの文字列値を比較しています。を使用して文字列値をintに解析してみてくださいparseInt(value, 10)

あなたの場合、

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

それが役に立てば幸い。

于 2014-04-09T11:53:01.327 に答える