2011-01-21 8 views
21

フォームを作成していて、入力値が数値の場合にのみコードを実行したいと考えています。私はいくつかのバリデーションプラグインの使用を避けようとしており、入力フィールドをループして値をチェックする方法があるのだろうかと思っていました。Jquery()を使用して検証する入力フィールドをループする

私は次のことをしようとしてきたが、私は私のロジックが間違っていると思う:

(#monthlyincomeはフォームIDです)

$("#submit").click(function() { 

    $("#monthlyincome input").each(function() { 

     if (!isNaN(this.value)) { 
     // process stuff here 

     } 

    }); 

}); 

任意のアイデア?

$("#submit").click(function() { 

    $("#monthlyincome input[type=text]").each(function() { 
     if (!isNaN(this.value)) { 
      // processing data  
      var age   = parseInt($("#age").val()); 
      var startingage = parseInt($("#startingage").val()); 

      if (startingage - age > 0) { 

       $("#field1").val(startingage - age); 
       $("#field3").val($("#field1").val()); 

       var inflationyrs = parseInt($("#field3").val()); 
       var inflationprc = $("#field4").val()/100; 
       var inflationfactor = Math.pow(1 + inflationprc, inflationyrs); 
       $("#field5").val(inflationfactor.toFixed(2)); 

       var estyearlyinc = $("#field6").val(); 
       var inflatedyearlyinc = inflationfactor * estyearlyinc; 
       $("#field7").val(FormatNumberBy3(inflatedyearlyinc.toFixed(0), ",", ".")); 

       var estincyears = $("#field2").val(); 
       var esttotalinc = estincyears * inflatedyearlyinc; 
       $("#field8").val(FormatNumberBy3(esttotalinc.toFixed(0), ",", ".")); 

       var investmentrate = $("#field9").val()/100; 
       var investmentfactor = Math.pow(1 + investmentrate, inflationyrs); 
       $("#field10").val(investmentfactor.toFixed(2)); 

       var currentsavings = $("#field11").val(); 
       var futuresavings = currentsavings * investmentfactor; 
       $("#field12").val(FormatNumberBy3(futuresavings.toFixed(0), ",", ".")); 

       //final calculations 
       var futurevalue = (1 * (Math.pow(1 + investmentrate, inflationyrs) - 1)/investmentrate); 
       var finalvalue = (1/futurevalue * (esttotalinc - futuresavings)); 

       $("#field13").val(FormatNumberBy3(finalvalue.toFixed(0), ",", ".")); 

      } 
      // end processing 
     } 
    }); 

}); 

FormatNumberBy3がために...数値をフォーマットする機能である:

これは、全体の更新されたコードです。 :)

+1

はこれをチェックしていない、それだけに浮かん私の頭..すべての入力要素でeach()を実行している場合は、サブミットボタンも含まれている可能性が高いので、サブミットの値をチェックし、数値でない場合は失敗します。これはテストされていませんが、論理的に見えます;)また、コードは正しく閉じられていませんが、コピー+貼り付けエラーの可能性があります。 – Sondre

+1

@Sondre、私もそう考えていましたが、彼はこの問題を回避するために '

+0

@Sondre:私は、(いくつかの入力フィールドにのみ対応する)クラスを同じ(否定的な)結果で使用しようとしています。クローズは実際にコピーの貼り付けエラーでした。 :P @ Box9:私は実際にボタンを使用していませんが、$( "。classname")。each()を使用してもまだ動作しません。 –

答えて

34

ここでテスト:

$(function() { 
    $("#submit").click(function() { 
     $("#myForm input[type=text]").each(function() { 
      if(!isNaN(this.value)) { 
       alert(this.value + " is a valid number"); 
      } 
     }); 
     return false; 
    }); 
}); 

このように見て、フォーム上:

<form method="post" action="" id="myForm"> 
    <input type="text" value="1234" /> 
    <input type="text" value="1234fd" /> 
    <input type="text" value="1234as" /> 
    <input type="text" value="1234gf" /> 
    <input type="submit" value="Send" id="submit" /> 
</form> 
が移動

この場合、単純なユニタリ+は、トリックを行いますあなたが合っているように周囲に虚偽を返す

編集:OPsフォームにコードにリンク http://pastebin.com/UajaEc2e

+0

私はここで壁に頭を打っています。あなたのコードはもちろん動作しますが、私と私の違いはわかりませんが、私のコードはまだ動かないでしょう... –

+0

@Alexよく、あまりあなたのコードの多くを見ることなくあなたを助けることができます。 )あなたが一度見つけたら笑ってしまういくつかの愚かなエラー; – Sondre

+0

おそらく...私は実際にはコードブロック全体を更新し、時間があれば自由にチェックしてみてください。 –

1

valueは文字列です。最初に番号に変換しようとする必要があります。これはうまく動作しますまあ

if (!isNaN(+this.value)) { 
    // process stuff here 
} 
+0

'isNaN(" 25 ");'正しく 'false'を返します。 – jAndy

+0

答えをありがとう。まだ運がない、それは完全にifステートメントを無視します... –

0

Sondre(Thank you!人々は

例を実装するためにずっとよりよく理解できるように、Sondre)上記の例では、私はフィドルのサンプルを開発:Click Here

$("#submit").on("click", function() { 
 
    var isValid = []; 
 
    var chkForInvalidAmount = []; 
 
    $('.partialProdAmt').each(function() { 
 
    if ($.trim($(this).val()) <= 0) { 
 
     isValid.push("false"); 
 
    } else { 
 
     isValid.push("true"); 
 
    } 
 
    if ($.isNumeric($(this).val()) === true) { 
 
     chkForInvalidAmount.push("true"); 
 
    } else { 
 
     chkForInvalidAmount.push("false"); 
 
    } 
 
    }); 
 
    if ($.inArray("true", isValid) > -1) { 
 
    if ($.inArray("false", chkForInvalidAmount) > -1) { 
 
     $(".msg").html("Please enter Correct format "); 
 
     return false; 
 
    } else { 
 
     $(".msg").html("All Looks good"); 
 
    } 
 
    } else { 
 
    $(".msg").html("Atlest One Amount is required in any field "); 
 
    return false; 
 
    } 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<form method="post" action="" id="myForm"> 
 
    <input type="text" class="partialProdAmt" value="0" /> 
 
    <input type="text" class="partialProdAmt" value="0" /> 
 
    <input type="text" class="partialProdAmt" value="0" /> 
 
    <input type="text" class="partialProdAmt" value="0" /> 
 
    <input type="button" value="Send" id="submit" /> 
 
</form> 
 
<div class="msg"></div>

関連する問題