m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

OT: フォームのボタンのnameにsubmitって名前をつけてはいけない

 今日数時間もの間、ずーっとはまっていたので、忘れないようにメモしておきます。

送信ボタンによって、送信先を変更したい

 最初は、送信ボタンはひとつしかありませんでした。
 機能追加の都合上、送信ボタンが3つに増えました。
 最初に作ったボタンの名前は「submit」でした。
 その「submit」ボタンをクリックした時に、もう一度自分のフォームを表示しているページを呼ぶようになっていたのですが、処理中にページのリフレッシュがなく表示が固まったままなので、別ページにフォーム送信して、別ページからもう一度元のフォームを呼ぶことで、送信ボタンの連打を防ごうとしました。

<button onclick="list_output(this.parent);" name="submit">集計</button>
<button onclick="csv_output(this.parent);" name="csv">csv出力</button>
<button onclick="pdf_output(this.parent);" name="pdf">pdf出力</button>

送信先変更は、フォームのactionを書き換える

 javascriptにて、こんなふうに書いていました。

var frm = document.forms['form_query'];
frm.action = '/foo/bar/baz';
frm.submit();

 action書き換え前後にalert()を挟んで、書き換わっているのを確認しても、送信先は変更されず、form要素にもともと記述されていたactionの値にしたがって送信されました。
 ずーっとこれにハマってた。

問題は、ボタンの名前

 submitボタンに「submit」って名前を使ってしまうと、action値の書き換えを無視して送信します。
 最新のFirefoxChromeで確認しました。
 試しにボタンの名前を「query」としたら、書き換えたあとのaction値にしたがって送信するようになりました。

な… 何を言ってるのか わからねーと思うがおれも何をされたのかわからなかった…

 ボタンのnameをsubmitやresetにしてしまうと、思わぬトラブルを引き起こすということを、今一度身を持って知りました。 忘れちゃいけない。