2016-04-27 4 views
2

編集:@mhodgesが質問に答えました。 Jsfiddleが更新されました。ありがとうございました!フォーム送信イベントをキャプチャしようとしましたが、再度キャプチャしません。

私は設定している計算機/寄付のフォームが少しあります。フォームはシンプルです。数字を入力すると、送信ボタンが計算を実行して新しい値を取得します。その時点で、寄付ページにリンクします。ここではいくつかのサンプルコードです:

<form id = "donation" action = "donation/page"> 
    <input id = "firstNumber" placeholder = "400.00"> 
    <input type = "submit" id = "submit" value = "Calculate Number"> 
</form> 

そして、ここで私はそれを実行しているjQueryの:

$(document).ready(function(){ 
    $("#donation:not(.ready)").submit(function(e){ 
    e.preventDefault; 
    var amount = $("#firstNumber").val()/5; 
    $("#firstNumber").val(amount); 
    $("#submit").val("Donate Now!"); 
    $("#donation").addClass("ready"); 
    }); 
}); 

編集:スペルチェックとJSのフィドルへのリンク:だから

JS Fiddle

電卓はうまく動作し、新しい価値は入力に大きく表示されます。私の問題は、submitボタンの値が変更されていないことと、submitボタンが.readyクラスを取得した後も計算を実行し続けることです。私は、私のjqueryのnot :(。ready)セレクタを使ってこれを修正すると思ったが、そうではない。何かご意見は?ありがとうございました!

答えて

2

イベントバインディングではなくevent delegationを使用する必要があります。 e.preventDefault()機能であるため、括弧を必要と

+0

これは最高の答えのようです。私はjqueryを初めて使っているので、委譲とバインディングについて考えなかった。本当にありがとう。 –

+0

@JamesHamann長い間jQueryを使っていたとしても、心配する必要はありません。イベントの委任のために投稿に追加したリンクを確認してください。違いを説明するのは良い仕事だと思います。 – mhodges

0

最初に選択して、見つかった要素に関数をバインドします。セレクタによって検出されたオブジェクトのリストは、後で変更されません。要素とイベントごとに1回のみイベントハンドラを実行する場合は、jQuery.oneを試してください。

+0

これは、しかし、.one()の唯一の問題は許容されていること、それはもはや -

$(document).ready(function(){ $(document).on("submit", "#donation:not(.ready)", function(e){ e.preventDefault(); var amount = $("#firstNumber").val()/5; $("#firstNumber").val(amount); $("#submit").val("Donate Now!"); $("#donation").addClass("ready"); }); }); 

注:コードは、次のことのようになります。 「レディ」クラスに依存しています。どのような理由であれ、イベントハンドラとクラス中の何らかのエラーが適用されない場合には、問題になります。ユーザーは、ページを更新せずに再試行する方法がありません。これは非常に基本的な例ではほとんどありませんが、コードが複雑になり、特に計算を実行するajax呼び出しがある場合、エラーの可能性が大幅に高まり、正常に機能しなくなる方法が必要です。 – mhodges

+0

次に、要素がハンドラの内部で「.ready」であることを確認します。あなたの答えは、とにかく、より良い@mhodgesです。 –

+0

残念ながら、残念ながら、if(hasClass( "。ready"))がそこにスローされた場合、渡されないと、イベントハンドラは引き続き同じ問題を残します。それは間違いなく終わりのケースですが、私はそれが言及する価値があると思います。あなたの解決策は、エラー処理の複雑さをコードしている限り有効です。私は、このソリューションをOPと将来の視聴者に使用する際の注意点を指摘したいと思います。 – mhodges

関連する問題