iOS で問題が発生しており、そのためのフィドルを作成しました。
任意のタッチ イベント (touchstart/touchmove/touchend) のドキュメントにイベント リスナーを追加すると、次のようになります。
function onTouch( e ){};
document.addEventListener( 'touchstart', onTouch, false );
その結果、入力フィールドは iOS で次のように動作します。
- 最初のタッチ: 入力がフォーカスされ、ユーザーが正しく入力できるようになります
- その後のタッチ (既に配置されているフィールドにフォーカスがある場合): 入力が機能しなくなりました
この問題は、iPad と iPhone (シミュレーターと実際のデバイス) の両方で、iOS 5、5.1、および 6 で発生し、テストしています。
唯一の修正は、イベントリスナーを削除して、入力フィールドの正しい動作を復元することです (または、実際にはリスナーをまったく追加しないようにします)。
document.removeEventListener( 'touchstart', onTouch);
また、ページに複数の iframe があり、そのうちの 1 つがリスナーをそのドキュメントに追加すると、他の iframe の入力フィールドも壊れることにも気付きました。
フィドルは Android フォンで正しく動作します。
なぜこれが起こっているのですか?または、iOS で入力を中断しないタッチ イベント用のグローバル カスタム イベント ハンドラーを配置するにはどうすればよいでしょうか?