iOSデバイス(モバイルSafari)の入力フィールドでテキストをプログラムで選択する


87

モバイルSafariを実行しているiPhone、iPadなどのiOSデバイスで入力フィールドのテキストをプログラムでどのように選択しますか?

通常.select()<input ... />要素で関数を呼び出すだけで十分ですが、これはそれらのデバイスでは機能しません。カーソルは既存のエントリの最後に置かれ、選択は行われません。


10
タッチデバイスであることがテキストの事前選択の関連性を変える理由はわかりません。タッチデバイスについてあなたが言ったことは、非タッチデバイスについても同様に言えます。ユーザーがアイテムをタッチして編集することを選択したときに、テキストを事前に選択したいと思います。ほとんどの場合、ユーザーは既存のコンテンツを置き換えたいと思う可能性があります。その場合、ユーザーはそれ以上触れたりドラッグしたりすることなくそれを行うことができます。また、既存のコンテンツを編集したい場合は、選択を解除したり、選択を変更したりできます。
sroebuck 2010

2
残念ながら、.focus()。select()は機能しません。
sroebuck 2010

2
私はこの問題について報奨金を始めています。私の目標は、ユーザーが私のテキスト領域をクリックし、[コピー]をタップしてテキストをクリップボードにコピーするのを非常に簡単にすることです。
ダンファブリッチ2010

ここでも同じです。MobileSafariで機能しないメソッドがたくさんあるようです。.select()と.focus()はその2つです。

@sroebuck David W. Keithのいい答えです!いいぞ!
eyurdakul 2015

回答:


95
input.setSelectionRange(0, 9999);

https://developer.mozilla.org/en/DOM/Input.select


3
これは私にとってはうまくいきましたが、同じ入力でマウスアップを停止することを含める必要がありました。
砂嵐2012年

8
これはiPadでもiPhoneでも機能しませんでした
Doug

4
これは、.focus()を呼び出す前に入力をトリガーした場合にのみ機能しましたinput.setSelectionRangefocus入力でイベントをリッスンしている場合は、無限ループを考慮することを忘れないでください。
allieferr 2014年

10
言及する価値のある落とし穴:readonly属性が設定されている場合、これはテキストエリアでは機能しません。
JayPea 2014年

5
私は1時間以上、さまざまなソリューションで遊んでいました。ハンドラーの呼び出しsetSelectionRange()は、プログラムでfocusトリガーすると機能します.focus()が、iOSで手動でテキスト入力をタップすると、選択は行われません。言うまでもなく、必要なのはsetSelectionRange()setTimeout 0内で呼び出すことだけで、フォーカスをトリガーするものに関係なく、期待どおりに機能します。

30

このスレッドでは何も機能しませんでした。iPadで機能するものは次のとおりです。

// t is the input field
setTimeout(function() {
    t.setSelectionRange(0, 9999);
}, 1);

これはf ** kinトリックを行います!ありがとうございました!「クリック」イベントで動作します
2016年

どうもありがとうございます!!
VaclavKusak19年

26

ネガティブなことを証明するのは難しいですが、私の調査によると、これはMobileSafariのバグです。

focus()は多かれ少なかれ機能することに注意してください。ただし、成功するには複数のタップが必要になる場合があります。問題のフィールドをユーザーがタップしたことに応答しようとしている場合は、タップ自体がフィールドを提供するため、必要ありません。フォーカス。残念ながら、select()MobileSafariでは機能しません。

あなたの最善の策は、Appleのバグレポートかもしれません。


1
私たちのテストは同じことを示しています。これは、モバイルサファリのバグ/欠落機能です。
Nir Levy

2
FWIW、これもWebKitに基づくChromeデスクトップとAndroidブラウザで動作します。
jrummell 2011年

24

このフィドルを参照してください:(入力ボックスにテキストを入力し、[テキストを選択]をクリックします)

iPod(5th gen iOS6.0.1)の入力ボックスでテキストを選択し、キーボードを開いて、[切り取り/コピー/提案...]メニューを表示しています。

プレーンJavaScriptを使用します。jQueryでこれを試しませんでした

document.getElementById("p1").selectionStart = 0
document.getElementById("p1").selectionEnd = 999

999という数字は単なるサンプルであることに注意してください。これらの数字は、選択する文字数に設定する必要があります。

更新:

  • iPod5-iOS6.0.1-正常に動作しています。
  • iPad1-iOS5.1.1-テキストのみが選択されています。選択を1回タップして、カット/コピーメニューを開きます
  • iPad2-iOS4.3.3-テキストのみが選択されています。選択を1回タップして、カット/コピーメニューを開きます

最後の2つについては、input要素でクリックイベントをトリガーして実験することができます

更新:(07-10-2013)

  • iPod5-iOS7.0.2-リンクのフィドルの使用:入力ボックスに入力されたテキストが表示されません。selectを押すと、facebook.com(??? wtf ???)にリダイレクトされます。そこで何が起こっているのかわかりません。

更新:(14-11-2013)

  • iOS 7.0.3:binki updateからのコメントのおかげで、 .selectionStart.selectionEnd 機能します。

更新:(15-01-2015)

  • iOSの8.xx:からのコメントのおかげでマイケル・シーバート。コメントからの抜粋:両方の場合に機能させるには、フォーカスイベントとクリックイベントの両方をリッスンしてからsetTimeout /_。debounceする必要がありました:入力をクリックするか、タブでフォーカスします

あなたは今日の私のヒーローです!チャームのように機能します!;-)
andi1984 2012

3
@ andi1984ヒーローバッジはどこで請求できますか?
バートs

1
他のiOSバージョンとの互換性について知っていますか?iOS5とiOS4で動作しますか?
andi1984 2012

1
iOS6では機能しますが、a)デスクトップChromeでは機能しませんb)テキスト入力が無効になっていると機能しません:(私の使用例:一意のURLを生成し、共有を容易にしたい
Mars Robertson

1
@barts jsfiddleの「共有」メニューがめちゃくちゃになっていて、おそらく見えない間にタップ可能でなければならないので、あなたはFacebookにたどり着いたと思います。iPadでiOS-7.0.3を使ってテストしているときに、自分で非表示のTwitterボタンをクリックすることになりました。また、私があなたをタップしていると思ったとき<input/>、iPadは私がjsfiddleの「CSS」ペイン(入力したものはすべて見えない)をタップしていると思っていたことがわかりました。タップを正しい方向に向けると、<input/>iOS-7.0.3では「テキストの選択」ボタンが完全に機能します:-)。
binki 2013年

7

申し訳ありませんが、以前の投稿では、Javascriptで回答が必要であることを示唆するJavascriptに気づきませんでした。

javascriptを使用してUIWebViewで必要なものを取得するために、2つの重要な情報をまとめて機能させることができました。モバイルブラウザについてはよくわかりません。

  1. element.setSelectionRange(0,9999); 私たちが望むことをします

  2. mouseUpイベントが選択を元に戻しています

したがって(プロトタイプを使用):

    input.observe( 'focus'、function(){
      this.setSelectionRange(0、9999);
    });
    input.observe( 'mouseup'、function(event){
      event.stop();
    });

トリックを行います。

マット


3
同じ問題が発生していて、ソリューションが機能していることがわかりましたが、jquery(実際にはモバイル)を使用しています。/ *フィルイン内のテキストを選択します* / $( "input")。focus(function(){this.setSelectionRange(0、9999); return false;})。mouseup(function(){return false;} );
砂嵐2012年

1
私はiPadとiPhoneでiOS8を使用していますが、ここに記載されているすべての回答の中で、@ DuStormのコード(この上のコメント)だけが私のために機能しました。繰り返しに、ChromeとSafariでのiOS 8の少なくとも作品で次のように: $("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; });
アーロン・ジェッセン

これを機能させるfocusinには、フォーカスの代わりにiOS 7
Lucas

3

フォーカスが機能するように見えますが、ネイティブイベントから直接呼び出された場合のみです。SetTimeoutなどを使用してフォーカスを呼び出すと、キーボードが呼び出されません。iOSキーボードの制御は非常に貧弱です。それは良い状況ではありません。


1

Android 2.2に付属のWebkitでは、次のようなものが機能しています。

function trySelect(el) {
    setTimeout(function() {
        try {
            el.select();
        } catch (e) {
        }
    }, 0);
}

Chromium Issue32865を参照してください。


1

iPad上のiOS7で、私がこの作業を行うことができた唯一の方法<textarea></textarea>は、<input>フィールドの代わりに実際に使用することでした。

例えば

<textarea onclick="this.setSelectionRange(0, 9999);">My text will be selected when textarea is clicked.</textarea>

textareaを読み取り専用にすると、選択トリックが機能しなくなるため、ユーザーが領域内のテキストを変更できないようにする方法はより困難でした。


1

私はこの解決策を探していましたが、あなたのすべての回答は、私のために別のワームの缶を開くのに役立ちました。

クライアントは、ユーザーができるようにしたかっクリックし、すべてをそしてまたユーザーみよう]タブを'とiPadですべてを選択する(外部キーボードで。私が知っている、狂いました...)

この問題に対する私の解決策は、イベントを再配置することでした。最初にフォーカス、次にクリック、次にタッチスタート

$('#myFUBARid').on('focus click touchstart', function(e){
  $(this).get(0).setSelectionRange(0,9999);
  //$(this).css("color", "blue");
  e.preventDefault();
});

あなたが何度も私を助けてくれたので、これが誰かを助けることを願っています。


-4

HTML5準拠のブラウザを使用placeholder="xxx"している場合は、inputタグで使用できます。それでうまくいくはずです。


8
私はこれが質問が尋ねていたものではないと思います
caitriona 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.