2016-03-23 15 views
1

2つの入力値に基づいて非表示のテキストボックスを更新する単純なJS関数があります。私は隠されたテキストボックスを更新する前に最大callstack /再帰エラーが多すぎるparseInt(x、10)

は、私がなぜこれがあまりにも多くの再帰を引き起こしている0

に値を設定していない場合は、その入力が数値で検証するのparseInt(、10はX)を使用しますエラー?

$(function() { 
     $("#payment-form").on("submit",function (e) { 

      var xDollars = $("#dollars").val(); 
      var xCents = $("#cents").val(); 
      //collect our form dollar and cents values, set to 0 if not int 
      if (parseInt(xDollars, 10) == "NaN") { 
       $("#dollars").val("0"); 
      } 
      if (parseInt(xCents, 10) == "NaN") { 
       $("#cents").val("00"); 
      } 

      //join dollars and cents and submit transaction amount 
      $("#TransactionAmount").val(xDollars + "." + xCents); 
      $("#payment-form").submit(); 
      return true; 
     }); 
    }); 
+2

あなたのエラーは 'parseInt()'とは何の関係もありません。イベントハンドラ内でトラップしているイベントを何らかの奇妙な理由で起こしているからです。なぜあなたは 'submit()'をもう一度呼びますか? –

+0

誰かがこれを閉じるために投票した理由を知りたいですか?私はこれがかなり正当な質問だと思う。 – Mark

+0

ちょうどUIの観点から..いずれかの値が数値でない場合、提出リクエストをキャンセルしてフォームエラーを表示したくないのですか? –

答えて

7

それはあなたの問題を引き起こしているparseInt()はありません、それはこのです:あなたは「提出」ハンドラ内から「送信」アクションをトリガーしている

 $("#payment-form").submit(); 

妥当性検査が成功した場合はtrueを返すだけであれば、フォームは正常に送信されます。

+0

私はこれを完全に見落としました。ありがとうございました。 – Mark

2

これは、jQueryがsubmitイベント経由でフォームを送信するのか、.submit()メソッドからフォームを送信するのかを区別しないためです。したがって、jQueryの$.submit()を使用すると、手動でsubmitイベントが発生します。

代わりにvanilla-jsを使用してください。あなたが.submit()を使用する場合Form submission algorithmによると、そのイベントが発生しません。

submit()方法から提出さフラグがセットされていない場合は、 fire a simple event形で、泡と submitという名前の解約であります。イベントのデフォルトアクションが防止されている場合(つまり、イベントがキャンセルされた場合は )、これらの手順を中止します。それ以外の場合は、 を続行します(実際には、デフォルトのアクションは送信を実行することです)。

したがって、これは問題ではないでしょう。

document.getElementById('payment-form').submit(); 

しかし、この場合にはあなただけの$("#payment-form").submit();を削除することができます。イベントをキャンセルしない場合、フォームは自動的に送信されます。

関連する問題