5

iPad Safari で、DIV のタッチ イベントをプログラムして、DIV 内をタッチして指を 500 ミリ秒保持すると、DIV の背景色が変化するようにしました。

コードをテキスト入力要素 (フィールドセット内) に移動して、DIV ではなくタッチ ターゲットにしようとすると、コードが機能しません。次の CSS にもかかわらず、テキスト入力が選択されます。

    input[type=text] {-webkit-touch-callout:none; -webkit-user-select:none }

iPad Safari でテキスト入力要素のタッチ イベントをインターセプトし、それらをカスタムの方法で処理して、デフォルトの動作を防止する方法はありませんか? または、これをサポートするための入力を得るために私がしなければならない追加のことがありますか? ダミーのクリック ハンドラー onclick="void(0)" を使用して、または使用せずに試しました。

これは、ドキュメントの処理イベントに従っているドキュメントです。

4

3 に答える 3

1

ハンドラー コードで呼び出さない場合preventDefault()、ブラウザーは自動的にタッチ イベントをデフォルトの実装に渡します (処理したと思われる後)。デフォルトの実装では、フィールドを選択します。

したがって、あなたの場合、ハンドラーで and を呼び出しpreventDefault()stopPropagation()false を返します。これにより、イベントがさらにバブリングするのを防ぎます。次に、入力要素を完全に制御できます。

警告: 入力フィールドのデフォルトの動作も失われます! つまり、フィールドにテキストを入力できなくなります。または、入力フィールドが の場合<select>、リストなどを引き上げることができません。

あなたが本当に望んでいるのは次のとおりだと思います:1)ユーザーが500ミリ秒押し続けると、黄色に変わり、2)および/またはリリース時に入力フィールドがアクティブになります。その場合、実際に入力フィールドを使用したい場合は、イベントを手動で上向きに再起動する必要があります。

この種の状況は、iPad をプログラミングするときに非常に一般的です。たとえば、多くの場合、(入力フィールド上であっても) タッチ ドラッグ モーションを検出し、それを移動として解釈したいが、(移動せずに) タッチ リリース モーションを入力フィールドをアクティブにするためのクリックとして解釈したい場合があります。 . 上記で提案したことを実行preventDefault()する必要があります。必要に応じてイベントを再起動します。

于 2011-03-22T06:28:50.610 に答える
1

入力を無効にして読み取り専用にしてみてください。

<input type="text" readonly />
于 2011-03-21T10:54:24.620 に答える
1

コードを投稿していただけると助かりますが、おそらくタッチ イベントでのデフォルトの動作を防止する必要があるだけだと思います。jQuery を使用する場合、これは次のようになります。

$("#ID")
        .bind("touchstart",
            function (e) {
                e.preventDefault();
                //do something
            })
        .bind("touchmove",
            function (e) {
                if (e.preventDefault) { 
                    e.preventDefault();
                }
                //do something
            });
于 2011-03-20T20:02:05.857 に答える