今日数時間もの間、ずーっとはまっていたので、忘れないようにメモしておきます。
送信ボタンによって、送信先を変更したい
最初は、送信ボタンはひとつしかありませんでした。
機能追加の都合上、送信ボタンが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値の書き換えを無視して送信します。
最新のFirefoxとChromeで確認しました。
試しにボタンの名前を「query」としたら、書き換えたあとのaction値にしたがって送信するようになりました。
な… 何を言ってるのか わからねーと思うがおれも何をされたのかわからなかった…
ボタンのnameをsubmitやresetにしてしまうと、思わぬトラブルを引き起こすということを、今一度身を持って知りました。 忘れちゃいけない。