背景:
一つのボタンで違う動きをコントロールしたい。
今回はURLにパラメータの有無で「新規登録」か「変更保存」にしたい。そのために、下記みたいなコードを書いた。
問題のあるコード.javascript
$(document).ready(function() {
$("#shop-page-submit").click(function() {
$("#shop-form").submit(function(event) {
event.preventDefault();
submit_func("shop-page",this);
//submit_func()ではAJAXで送信する操作ある
});
});
});
問題
上記のコードは「クリックされるたびに送信ハンドラが追加されるだけ」になっていて、実際送信されていない。
$("#shop-form").submit(function(event) { ... })
は送信されるたびに、新しいハンドラを登録するだけ。フォームを送信していない。登録だけなんで、submit_func("shop-page", this)
は実行されていない。
それに対して、$("").submit();
は送信するので、下記のように直すと、送信できた。
解決方法
$(document).ready(function() {
//クリックされると、送信する
$("#shop-page-submit").click(function() {
$("#shop-form").submit();//$("").submit();では送信できる
});
//送信イベントに新しいハンドラsubmit_func()を登録する
$("#shop-form").submit(function(event) {
event.preventDefault();
submit_func(event, "shop");
});
});
$("セレクタ").submit();
と$("セレクタ").submit(function(event) { ... });
とは違うということを忘れてしまい、問題が発生した。
前者は「実行」だが、後者は「何をするか」の「何」を定義するということ。