質問: ASP.NET にて二重送信の対応をしているのですが、バリデーションとJSのクリックイベントがぶつかってしまい、イベントハンドラまでたどり着けません・・・。 **aspx** ``` ``` **JavaScript** ``` ``` 参考URL 一度クライアントでバリデーションエラーが出ている状態でsubmitし、その後エラーを修正して再度submitを押下したところ、二重送信と判断されてしまいます。 (CausesValidation="false" にすればバリデーションの順番を調整できる、と認識していたのですが、その後の二重送信防止の処理で return false になっているようです。) デバッグしたところ、`$(this).submit(function (){` に何度もアクセスされてしまうのですが、条件分岐に何か間違いがあるのでしょうか。
回答: なぜ質問文のコードでポストバックが発生しないのかは分かりませんが、2点問題があるのでそこを修正すれば正常動作するものと思います。 まず、 > > デバッグしたところ、`$(this).submit(function (){` に何度もアクセスされてしまうのですが、条件分岐に何か間違いがあるのでしょうか。 > > > ですが、これは`isValid()`が実行されるたびに`form.onsubmit`に関数をバインドしているからです。なので1クリックで`Page_IsValid`が`true`にならなかった場合は以前のクリックで登録した関数も呼び出されることになります。 それから`CausesValidation`による順序調整ですが、`jQuery`で登録された`onsubmit`イベントは必ず`onclick`属性の`WebForm_OnSubmit()`より後に発生します。なので`onclick`でバインドする必要は特にありません。 以上の理由から`CausesValidation`を特に指定せずに ``` ``` のようなスクリプトをロード時に実行しておけば二度押し防止になります。