iPhone で jQuery によるフォームの送信ができない問題の対処法

iPhone で jQuery によるフォームの送信ができない問題の対処法

iphone_jquery_submit_top

jQuery submit() が Safari のブラウザで動作しない

開発中のウェブサイトにて、iPhone の Safari でフォームが送信できない問題があることに気づきました。フォームごとに動作したりしなかったりと動作が安定せずに頭を抱えました。

調査を行ったところ iPhone にて、jQuery による submit() が正常に動作していない様子。

そこで今後のためにも色々と動作検証を行いながら調査してみたので、情報をまとめていきます。

Advertisement

端末とブラウザごとの jQuery submit() の動作結果

端末 ブラウザ 結果
Windows(PC) Chrome
FireFox
IE 11
Mac(PC) Chrome
Safari
iphone(スマホ) Chrome ×
Safari ×
Android(スマホ) Chrome
FireFox

調査結果をみて分かるように Windows10 の Chrome や FireFox、IE や Mac の Safari や Chrome は OK。スマホ端末である Android も問題なし。

iPhone のみで起こる問題であることが分かります。しかもブラウザ依存ではなく、iPhone 特有の動作です(汗)。
※上記の調査および挙動は iPhone8 と iPhoneXR で動作確認した結果です。

 

jQuery submit() が動作しない原因と解決法

jQuery submit() が iphone で動作しない原因

フォームから送信するトラフィックを確認したところ、iPhone のブラウザではフォームの submit ボタンのクリックしたタイミングで、

[name]=[name]

をデータに追加していることが判明しました。

つまり自分で jQuery で submit() する場合も同じパラメータを追加すれば動作するはず!ということで、問題が解決する目途が立ちましたね。

 

jQuery submit() を iphone で動作させる対処法

原因調査で判明した対処法である

[name]=[name]

をフォームに組み込めば動くはずなので、
動作しないプログラムと解決方法の施したプログラムを動作検証しました。

問題なく動作したので解決方法は、[name]=[name] で間違いなさそうです。

iPhone で動作しないフォーム

 

iPhone で動作するフォーム

 

問題が解決したので意気揚々と対応しようとしたところ別の問題点が発生しました。

複数のボタンがあるときに先に「[name]=[name]」書かれた方が強制的に実行される問題です。
つまり例を出すとフォームに「戻る」と「次へ」の2つのボタンがあるとき、

[back]=[back]
[next]=[next]

みたいな設定を行うとどちらのボタンを押しても「戻る」が実行されてしまいます。

頭を抱える結果になりましたが、
ボタンを押して後に実行する javascript でパラメータを追加すればよいという事で、最善の解決方法が下記の通りになります。

最善の解決法

 

さいごに

補足情報として最後に注意点を1つ記載します。

ウェブサイトの開発にてフレームワークを使用した環境の場合、jQuery 内で hidden 内の値を変更するとセキュリティエラーになる可能性があります。対象のパラメータをセキュリティ対象外にするなど、フレームワークの調整はご自身の環境に合わせて調整してください。
※CakePHP3 で言えば unlockedFields を対象のパラメータに設定する必要があります。

Advertisement

web開発カテゴリの最新記事