0

私はこのjquery関数を持っています:

$(function() {

    $('.submitButton').click(function(){
        $('input').each(function() {
             if ($(this).attr('min')) {
                 if ($(this).val()<$(this).attr('min')){
                      $('#'+$(this).attr('id')+"_errMess").prepend(' Your data should be more than '+$(this).attr('min'));
                  }
              }
        });
    });
});

入力に入力された最初の桁のみをチェックしているようです。たとえば、「min」属性の値が7で、入力に入力された値が10の場合、エラーメッセージが表示されます(if条件がtrue !!)。値を警告したいのですが、真の合計値を知っているようで、10を返します。

alert($(this).val());

何が悪いのか理解するのを手伝ってくれませんか。

4

3 に答える 3

1

ここでの問題は、7から10ではなく「7」と「10」を比較していることです[文字ごとのASCII比較であり、実際の整数比較ではありません]。値に対してparseInt()を実行してから比較すると、目的の結果が得られるはずです。

変化する

$(this).val()<$(this).attr('min')

parseInt($(this).val())< parseInt($(this).attr('min'))

あなたのif条件の内側

また、変数に値を抽出してから比較を実行することをお勧めします。

于 2012-12-29T05:52:34.427 に答える
1

.val文字列(文字列を返す)から数値へのキャストがありません:

$(function() {
    $('.submitButton').click(function() {
        $('input').each(function() {
            if ($(this).attr('min')) {
                if (Number($(this).val()) < Number($(this).attr('min'))) {
                    $('#' + $(this).attr('id') + "_errMess").prepend(' Your data should be more than ' + $(this).attr('min'));
                }
            }
        });
    });​
于 2012-12-29T05:53:21.320 に答える
1

val()文字列を返し、文字列「10」はJavaScriptで「7」未満です。実際に必要なのは数値の比較なので、文字列を比較する前に、parseIntまたはNumber文字列を比較する前に変換します。スタックオーバーフローに関する他の質問を確認できます。文字列「11」が文字列「3」よりも小さいのはなぜですか。

ちなみに、ドル関数を繰り返し呼び出すのではなく、$(this)を変数に保存する方がよいでしょう。

于 2012-12-29T05:57:25.063 に答える