13

iOS で問題が発生しており、そのためのフィドルを作成しました。

http://jsfiddle.net/Hk56Q/

任意のタッチ イベント (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 で入力を中断しないタッチ イベント用のグローバル カスタム イベント ハンドラーを配置するにはどうすればよいでしょうか?

4

3 に答える 3

2

私の場合、テリーの回答のバリエーションは、このモバイル Safari バグ (!!!) を回避しました。ここでは、「#input」とこのコードが iframe ページにあります。

var el = $('#input');
el.on('keydown', function() {
  window.focus()
  el.focus()
});

バグは複数の方法でトリガーされますが、「キーダウン」は確実に発生します。これにより、次の「キープレス」も到着します。

于 2016-01-11T21:34:20.590 に答える
0

jQuery Mobile 1.2.0 が必要なはずです

証明!ボックスにチェックを入れる前に:

PROVE(前)

ボックスにチェックを入れた後:

カチカチした後

于 2014-04-26T11:54:31.210 に答える