2012-02-19 17 views
2

フォームが複数回送信されないようにするには、クリックした後にフォーム送信ボタンを無効にします。私はボタンを無効にし、それが無効に見せるクラスを追加するために、次のコードを使用します。クリック後にフォームボタンを無効にする

$("form button.primaryAction").click(function() { 
    $(this).prop("disabled", true).addClass('disabledBtn'); 
    return true; 
}); 

それはIEとFirefoxで正常に動作しますが、クロム17でフォームが送信されません。

$("form button.primaryAction").click(function() { 
    $(this).prop("disabled", true).addClass('disabledBtn'); 

    var form = // how can I get a reference to the form from the button 'this' ? 
    form.submit(); 
    return false; 
}); 

をしかし、あなたが見ることができるように私は、クリックハンドラ内からフォームへの参照を取得するかどうかはわかりません。私は私がして上記のコードを置き換えることができると思います。

答えて

1

あなたのコードは意味をなさない!まず、デフォルトの送信を無効にしてから、手動で送信します。

$("form button.primaryAction").click(function() { 
    $(this).prop("disabled", true).addClass('disabledBtn'); 

    var form = this.form; 
    form.submit(); // submits the form 
    return false; // disable the defualt submit.... ?! 
}); 

自動送信をキャンセルしないでください!

$("form button.primaryAction").click(function() { 
    $(this).prop("disabled", true).addClass('disabledBtn'); 
}); 

私はそれをこのように記述します。

$("form").submit(function() { 
    $('button.primaryAction').prop("disabled", true).addClass('disabledBtn'); 
}); 
+0

見た、すなわちreturn文ではない。このフォームはChromeでコード –

+0

@Donで送信していませんでした。多分あなたはfalseを返す他の提出ハンドラを持っているので、提出を妨げるでしょうか? – gdoron

3

this.formが参考になります。

すべてのフォーム要素(ボタン、入力、選択など)は、フォームのフォームを持ちます。このフォームは、それらが属するフォーム要素を指しています。

+1

+1私はまだ元のコードは、Chromeで動作しない理由を知りたいんだけれども? –

+0

これは、フォームが送信される前にボタンを無効にしたためだと思います。 submit()を使用する代わりに、ボタンを無効にする前に短時間の遅延を使用することが可能である必要があります(場合によっては、サーバーサイドのクリックされたボタンに関する情報が必要な場合など)。 –

2

click()関数ではなくjqueryのsubmit()関数を使用すると、この問題を回避することができます。含まれている関数は、送信アクションが行われた後にのみを起動します。

関連する問題