0

入力値から整数値を取得する際に、jQuery にストリッピングの問題があるようです。

私のコード:

    // Control the rating input field to only accept numeric values
    // -else set the values back to 0
    // For the highest value:
    $('.dsListItem .firstItem').keyup(function(){
        if (isNumber($(this).val()) && $(this).val() < $('.dsListItem .lastItem').val()) {
            console.log('FIRST: ' + $(this).val() + ' >>> ' + $('.dsListItem .lastItem').val());
            $(this).val($('.dsListItem .lastItem').val());
        }
    });
    // For the lowest value:
    $('.dsListItem .lastItem').keyup(function(){
        if (isNumber($(this).val()) && $(this).val() > $('.dsListItem .firstItem').val()) {
            console.log('LAST: ' + $(this).val() + ' >>> ' + $('.dsListItem .firstItem').val());
            $(this).val($('.dsListItem .firstItem').val());
        }
    });

Safari Inspector は次のように教えてくれます。

ラスト: 11 >>> 10

ラスト: 2 >>> 10

ラスト: 1 >>> 10

0 と 1 のみが有効です。10 が「1」として検証された場合、1 > 1 も渡すべきではありませんが、渡されます。

console.log() の出力に正しい整数が表示される理由がわかりませんが、それを使用して計算すると、10 の get が 1 に変換されます。

($(this).val() * 1) で数値をキャストしてみましたが、何も変わりませんでした。値は有効な数値であることがすでにチェックされています。

4

1 に答える 1

1

数値を使用していることが確実な場合は、parseIntを使用してそれらをキャストする必要があるため、Javascriptも数値と通信し、数値を文字列と比較しないようにします。

parseIntを使用したキャストは、*1命令を使用したキャストよりも強力だと思います...

于 2013-02-11T16:43:19.767 に答える