メールフォーム作成時の備忘録 button type

メールフォームはプログラムではよくある案件です。
今回、一部のIE11(インターネットエクスプローラ11)で起きた現象への対処法の備忘録です。
IE11(インターネットエクスプローラ11)でメールが二重送信されてしまう
PHPの関数「mb_send_mail()」でメールを送信しているのですが、「送信」ボタンをクリックするとなぜかメールが二重送信されてしまいます。
SafariやFirefox、Edgeなどは正常に1通のみの送信ですが、一部の環境のIE11(インターネットエクスプローラ11)だけ二重送信されてしまいます。
メール二重送信の原因
プログラム、HTMLを細かく確認してみました。
<button>をクリックするとjQueryでバリデーションなどの処理をし問題なければ<button>をdisabledに変更し $(this).parent().submit();でPOST送信しています。
送信されたデータを受け取ったPHPがmb_send_mail()でメール送信の流れです。
以下、簡略化したソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php if( $_SERVER['REQUEST_METHOD'] == 'POST' ){ mb_send_mail(....); } ?> .... .... .... <form> .... .... <button type="submit" id="send_btn"> </form> .... <script> $('#send_btn').on('click',function(){ $('#send_btn').prop('disabled', true); $(this).parent().submit(); }); </script> |
原因は、<button>のtypeがsubmitになっていることでした。
IEの場合は、type=”submit” で1回目の送信、submit() で2回目の送信をしてしまうようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php if( $_SERVER['REQUEST_METHOD'] == 'POST' ){ mb_send_mail(....); } ?> .... .... .... <form> .... .... <button type="button" id="send_btn"> </form> .... <script> $('#send_btn').on('click',function(){ $('#send_btn').prop('disabled', true); $(this).parent().submit(); }); </script> |
<form>とIE(インターネットエクスプローラ)
IE(インターネットエクスプローラ)では<form>タグを入れ子にしてしまうと正常動作しません。
他のブラウザは動作はします。
1 2 3 4 5 6 7 8 | <form> <form> <input type="submit"> </form> <input type="submit"> </form> |
挙動としてはIE(インターネットエクスプローラ)が正しく解釈しているのですが、他のブラウザでは動作するので、IEの仕様に合わせてほしいです。
IEでのテストはまだまだ必須
デフォルトのブラウザがEgdeになったWindowsですが、IE11(インターネットエクスプローラ11)のシェアはまだ20%ほどあるので無視することができません。


jQueryやJavaScriptで<form>のsubmitを行う場合は注意が必要です。
- PHP メールフォーム(お問い合わせフォーム)をプログラミングしてみる
![PHP メールフォーム(お問い合わせフォーム)をプログラミングしてみる PHP メールフォーム(お問い合わせフォーム)をプログラミングしてみる]()
- iCloudメールにメールが届かない PHP mb_send_mail
![iCloudメールにメールが届かない PHP mb_send_mail iCloudメールにメールが届かない PHP mb_send_mail]()
- macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る
![macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る]()
- jQuery $(this)でoptionの情報を取得する 備忘録
![jQuery $(this)でoptionの情報を取得する 備忘録 jQuery $(this)でoptionの情報を取得する 備忘録]()
- HTML 5 基本的な構造とWebアクセシビリティの考慮
![HTML 5 基本的な構造とWebアクセシビリティの考慮 HTML 5 基本的な構造とWebアクセシビリティの考慮]()
- テキストなどでディレクトリ構造を伝える便利な記号
![テキストなどでディレクトリ構造を伝える便利な記号 テキストなどでディレクトリ構造を伝える便利な記号]()
- CrowdWorks 提案後、受注に繋がりました。提案〜契約までの流れを解説
![CrowdWorks 提案後、受注に繋がりました。提案〜契約までの流れを解説 CrowdWorks 提案後、受注に繋がりました。提案〜契約までの流れを解説]()
- AI ロボットが活躍!人不足の時にも安心
![AI ロボットが活躍!人不足の時にも安心 AI ロボットが活躍!人不足の時にも安心]()
- XSERVERにSSHを利用してLaravel環境を構築する
![XSERVERにSSHを利用してLaravel環境を構築する XSERVERにSSHを利用してLaravel環境を構築する]()
S.E->Weekly Ranking;
S.E->プロフィール;














![Apple AirPods Pro[MWP22J/A]の偽物(コピー品)を正規品と徹底比較 Apple AirPods Pro[MWP22J/A]の偽物(コピー品)を正規品と徹底比較](https://www.programming-se.com/wp-content/uploads/2020/07/スクリーンショット-2020-07-13-0.00.32-300x176.jpg)






