1

予期しない結果を返すばかげた条件について非常に混乱しています。自分のコードの問題が何であるかを理解することができません。これが私の簡単なコードです

$('.for_next_link').click(function() {

    var next = $('.for_next_value_pagination').val();
    var limit = "<?php echo $max; ?>";

    alert(next); // value is 5
    alert(limit); // value is 10

    if (next >= limit) // this condition is always true
    {
        alert('im in if cond.');
        return false;
    }
    else {
        // do something else;
    }
});​

それぞれ値が 5 と 10 の 2 つの変数 "next" と "limit" を比較していますが、if 条件が常に true であることに驚かされます。どうしてこうなったのか、解決策を教えてください。ありがとうございました。

4

4 に答える 4

1

あなたは文字列比較を行っています.firebugからのコンソール,

>>> "5">"10"
true

>>> 5>10
false

>>> "5">10
false

>>> 5>"10"
false
于 2012-09-12T08:48:17.283 に答える
0

2 つの数値ではなく、2 つの文字列値を比較しています。代わりにこれを試してください:

if(Number(next) >= Number(limit)){

文字 "5" は "1" ("10" の最初の文字) よりも高い ASCII 値を持つため、"5" は "10" より大きいと見なされます。

于 2012-09-12T08:49:06.673 に答える
0

実際には"5"(文字列) と"10"(文字列) を比較しています。"5" > "10"true、アルファベット順で の5後に来るため1です。

代わりに、それらを数値で比較します。

if(parseInt(next, 10) >= parseInt(limit, 10))

(以下のように、変数を初期化すると同時にそれらを解析したい場合があります)

var next = parseInt($('.for_next_value_pagination').val(), 10);
var limit = parseInt("<?php echo $max; ?>", 10);
于 2012-09-12T08:49:13.350 に答える
0

これは、文字列を比較しているためです。

"5" >= "10" is true

それらの1つにキャストを強制します

if(next*1 >= limit*1) is false
于 2012-09-12T08:48:17.747 に答える