質問: form.serialize(); _this.val('チェック中'); $.ajax({ type: "POST", cache: false, url: "check.php", data: { mode : mode, datas : datas }, dataType:"json" }).done(function(datas) { if(datas['err']){ $.each(datas.err,function(key, item){ $('*[name="'+key+'"]').after(' '+item+''); }); _this.val('エラーあり'); } else { _this.val('OK'); form.off('submit'); form.submit(mode); } }); }); ``` ### 試したこと どこまで進んでいるのかわからなかったのでボタンのvalueを書き換えてみたところ きちんと「OK」になるのですが1回目のクリックではform.submit(mode);が動きません。 form.off('submit');の動きなどはあまりきちんとわかっていないためなぜ送られないのかがよくわかりません。 よろしくお願いします。
回答: 最後の`submit(mode)`はsubmitイベントにバインドするだけの処理になっています。 ~~第二引数に`true`を返すように指定することでsubmitできると思います。~~ 追記~~ すみません。第二引数は関数の指定でした。`submit(mode)`と同じで第二引数を指定するのもバインドとするだけの処理です。 ``` submit(mode); submit(); ``` としてください。 .submit() リファレンス リファレンスを見ると、 `.submit(hoge)`,`.submit(hoge,function(){})`は`.bind('submit', handler)`への、`.submit()`は`.trigger('submit')`へのショートカットですと書かれています。 ~~追記終わり 動作検証していませんが、正しくはajaxの処理を下記のsubmitの処理で囲むのが正だと思います。 ``` form.submit(function(e) { e.preventDefault(); //送信STOP }); ``` 参考URL