フォーカスを受け取ったときにテキストボックスのすべてのコンテンツを選択します(Vanilla JSまたはjQuery)


311

テキストボックスがフォーカスを受け取ったときにテキストボックスのすべてのコンテンツを選択するVanilla JSまたはjQueryソリューションとは何ですか?



3
リンクがこの質問自体にリダイレクトする何らかの理由で@gdoron。
2013年


これらのソリューションのほとんどの問題は、入力フィールド内のカーソル位置を変更すると、正しく機能しないことです。ここで私の答えを見てください:stackoverflow.com/a/20826207/641452
Colin Breame

回答:


370
$(document).ready(function() {
    $("input:text").focus(function() { $(this).select(); } );
});

23
また、追加情報として「input [type = text]」を「input:text」にできるようになりました
Ricardo Vega

8
これはChromeでは動作しないようで、jQuery Webサイトはブラウザに依存していると言っています。他の誰かが確認できますか?
ケニーワイランド2012

71
mouseupイベントが原因で、WebKitブラウザーがこれを妨害しているようです。これを追加して機能しました:$( 'input:text')。mouseup(function(e){return false;});
ケニーワイランド2012

5
ケニーは正しいですが、残念ながら「マウスアップ」もChromeのスピナーコントロールに影響します。「フォーカス」ではなく「クリック」をトリガーすることで解決できるようです
リチャードケナード

24
私は次のように使用します:$( "input:text")。select()。focus();
Phuong

227

<input type="text" onfocus="this.select();" onmouseup="return false;" value="test" />


43
+クリックで選択解除を停止するには、onmouseup = "return false"
Anthony Johnston

2
mouseupのある種のstopEventの+1、またはこれは確実に機能しません。これを行うことの欠点は、カーソルがフィールドに入ると、選択したテキスト内のどこかをクリックしてもカーソルが動かないことです。クリックは事実上無効になります。それでも、テキスト全体をフォーカスして選択することが望ましい状況では、おそらく2つの悪のうちの小さい方です。

この!= document.activeElementの場合、onMouseDownイベント中にグローバル変数doMouseUpをfalseに設定することで、問題によって引き起こされた問題をある程度回避することができました。次に、onMouseUpの間に、doMouseUpをtrueにリセットし、doMouseUp値をリセットしてからリセットします。これは複雑になっており、コードが必要です-私はそれをよりよく説明する答えを投稿します。
トラビス

1
テキストボックス内フォーカスしたonmouseup="return false;"、ユーザーがテキストを自由に選択および編集できるようにする場合は追加しないでください。このコードを使用すると、テキストは「すべて選択」の状態にロックされ、ユーザーが新しいテキストを入力するか、矢印キーを使用して移動しない限り、ユーザーはテキストを編集できません。正直なところ、これは非常に奇妙な動作のように感じられ、テキストボックスを永続的に編集不可能にする(つまり無効にする)ことを意図しない限り、意味がありません。
ADTC

1
技術的onmouseup="return false;"には、ユーザーが最初にクリックまたはタブしたときに選択が発生するようにするだけの場合は必要ありません。そして、バニラJavaScriptの+1!
clabe45


39
$(document).ready(function() {
    $("input:text")
        .focus(function () { $(this).select(); } )
        .mouseup(function (e) {e.preventDefault(); });
});

1
これはいい。ありがとう!ザックの回答に対する不快感によるコメントは、mouseupイベントのデフォルトを防止することの1つの欠点を示しています。焦点を当ててテキスト全体を選択することが望ましい状況では、それはおそらく2つの悪のうちの小さい方です。」
JohnK、2014年

25

jQueryは、場合によっては使いやすいJavaScriptではありません。

この例を見てください:

<textarea rows="10" cols="50" onclick="this.focus();this.select()">Text is here</textarea>

出典:CSSトリックMDN


7
マークアップとコードをすべて混同してもかまわない場合は、それで十分でしょう。現在、ほとんどの人はスクリプトを「邪魔にならない」ようにしようとしています。ああ...そしてjQuery Javascriptです。
Andrew Barber

2
onclickの提案に感謝します。誰もがjQueryを使用しているわけではないので、別のオプションを見てうれしいです。
Lukus 2013

これは、ユーザーがマウスのみを使用することを前提としています
pcnate 2018年

キーボードにonfocus = "this.focus(); this.select()"を使用できます
Muhammad Nadeem

21

これは単なるChrome / Safariの問題ではなく、Firefox 18.0.1でも非常によく似た動作が発生しました。おもしろいのは、これはMSIEでは発生しないことです。ここでの問題は、入力コンテンツの選択を強制的に解除する最初のマウスアップイベントです。最初の発生を無視してください。

$(':text').focus(function(){
    $(this).one('mouseup', function(event){
        event.preventDefault();
    }).select();
});

timeOutアプローチは奇妙な動作を引き起こし、すべてのmouseupイベントをブロックすると、入力要素をもう一度クリックして選択を削除することはできません。


1
+1を使用すると、1回のマウスアップを防止できます。最初のクリック後、マウスでテキストを選択できないのが本当に嫌いでした。
Pluc 2013年

13

HTML:

Enter Your Text : <input type="text" id="text-filed" value="test">

JSの使用:

var textFiled = document.getElementById("text-filed");
textFiled.addEventListener("focus", function() { this.select(); });

JQueryの使用:

$("#text-filed").focus(function() { $(this).select(); } );

React JSの使用:

レンダリング機能内のそれぞれのコンポーネントで-

<input
  type="text"
  value="test"
  onFocus={e => e.target.select()}
/>

2
私にとってこの作品は、下で反応:onFocus={(e) => e.target.select()}
Paito

11

私の解決策は、タイムアウトを使用することです。うまくいくようです

$('input[type=text]').focus(function() {
    var _this = this;
    setTimeout(function() {
        _this.select();
    }, 10);
});

これは私が使用して好むソリューションです。現在のイベントキューの最後に追加されるので、タイムアウト値0を使用します。つまり、「mouseup」イベントの後に実行されます。
DavidM 2014


4

インラインコードが悪いスタイルであることは知っていますが、これを.jsファイルに入れたくありませんでした。jQueryなしで動作します!

<input type="text" value="blah blah" onfocus="this.select(); this.selAll=1;" onmouseup="if(this.selAll==0) return true; this.selAll=0; return false;"></input>

3

ここでの回答はある程度役に立ちましたが、Chromeの上下ボタンをクリックすると、HTML5数値入力フィールドで問題が発生しました。

いずれかのボタンをクリックして、ボタンの上にマウスを置いたままにすると、マウスアップが放棄されたために、マウスボタンを押しているかのように番号が変化し続けます。

以下のようにトリガーされたらすぐにマウスアップハンドラーを削除して、これを解決しました。

    $("input:number").focus(function () {
        var $elem = $(this);
        $elem.select().mouseup(function (e) {
            e.preventDefault();
            $elem.unbind(e.type);
        });
    });

これが将来の人々に役立つことを願っています...


いいえ。自己生成された問題の解決策を提供しています。答えを正しく見るmouseupと、テキスト入力フィールドにのみバインドされており、numbers にはバインドされていません。したがって、この問題は発生しないはずです
Om Shankar 2013

マウスアップのバインドの問題は、フィールド内でカーソルを移動するときに干渉することです。これはより良い解決策ですが、フィールドにタブで移動すると、次のマウスダウンは失われます(そしてユーザーはマウスでカーソルを移動できなくなります)。それはすべてのマウスダウンを失うよりはましです!
Colin Breame 2013

3

これは機能します、これを試してください-

<input id="textField1" onfocus="this.select()" onmouseup="return false" /> 

Safari / IE 9とChromeで動作しますが、Firefoxでテストする機会がありませんでした。


3

ここにはすでにたくさんの答えがあることは知っていますが、これは今のところ欠けています。ajaxで生成されたコンテンツでも機能するソリューション:

$(function (){
    $(document).on("focus", "input:text", function() { 
        $(this).select(); 
    });
});

2

いくつかの関数呼び出しを組み込むことで、ザックの答えを少し改善することができました。その答えの問題は、onMouseUpを完全に無効にすることです。これにより、フォーカスがあるとテキストボックス内をクリックすることができなくなります。

これが私のコードです:

<input type="text" onfocus="this.select()" onMouseUp="javascript:TextBoxMouseUp();" onMouseDown="javascript:TextBoxMouseDown();" />

<script type="text/javascript">
    var doMouseUp = true;
    function TextBoxMouseDown() {
        doMouseUp = this == document.activeElement;
        return doMouseUp;
    }
    function TextBoxMouseUp() {
        if (doMouseUp)
        { return true; }
        else {
            doMouseUp = true;
            return false;
        }
    }
</script>

これはザックの答えよりもわずかに改善されています。IEで完全に動作し、Chromeではまったく動作せず、FireFoxでも成功します(文字通り1回おきに)。FFまたはChromeで確実に機能させる方法について誰かが考えている場合は、共有してください。

とにかく、これをもう少し良くするために何ができるかを共有したいと思いました。


コードにエラーがあります-2番目のメソッドは「TextBoxMouseUp」と呼ばれます。同様のアプローチを使用する私の答えを見てみましょう。
Colin Breame 2013

1
注意すべきこと onMouseUp=""onMouseDown=""正しいW3の規格ではありません。それらはである必要がonmouseup=""ありonmousedown=""ます。他のhtml属性と同様に、キャメルケースではなく小文字で記述する必要があります。
DrewT 2015年

2

@Travisや@Mariと同様に、ユーザーがクリックしたときに自動選択する必要がありました。これは、 mouseupイベントのが、ユーザーがクリックするのを妨げることはありません。IE11、Chrome 45、Opera 32、Firefox 29(これらは現在インストールしているブラウザーです)で機能する私が思いついたソリューションは、マウスクリックに関連する一連のイベントに基づいています。

フォーカスのないテキスト入力をクリックすると、(とりわけ)次のイベントが発生します。

  • mousedown:クリックに応じて。デフォルトの処理レイズfocus必要に応じて、選択の開始を設定します。
  • focus:のデフォルト処理の一部としてmousedown
  • mouseup:クリックの完了。デフォルトの処理により、選択が終了します。

すでにフォーカスされているテキスト入力をクリックすると、focusイベントはスキップされます。@Travisと@Mariの両方が気づいたように、デフォルトのの処理はmouseupfocusイベントが発生した場合にのみ防止する必要があります。ただし、「focus発生しませんでした」イベントはないため、mousedownハンドラー内でこれを推測する必要があります。

@Mariのソリューションでは、jQueryをインポートする必要がありますが、これは避けたいです。@Travisのソリューションはを検査することでこれを行いdocument.activeElementます。私は正確に彼の解決策は、ブラウザ間で動作しない理由を知りませんが、テキスト入力にフォーカスがあるかどうかを追跡するための別の方法があります:単純に従うfocusblurイベントを。

これは私のために働くコードです:

    var blockMouseUp = false;
    var customerInputFocused = false;

    txtCustomer.onfocus =
      function ()
      {
        try
        {
          txtCustomer.selectionStart = 0;
          txtCustomer.selectionEnd = txtCustomer.value.length;
        }
        catch (error)
        {
          txtCustomer.select();
        }

        customerInputFocused = true;
      };

    txtCustomer.onblur =
      function ()
      {
        customerInputFocused = false;
      };

    txtCustomer.onmousedown =
      function ()
      {
        blockMouseUp = !customerInputFocused;
      };

    txtCustomer.onmouseup =
      function ()
      {
        if (blockMouseUp)
          return false;
      };

これが誰かのお役に立てば幸いです。:-)


+1ありがとうございます。しかし、「txtCustomer」コントロールをスクリプトにハードコーディングしないように、これをどのように書き換えることができますか?「this」オブジェクトを渡す方法はありますか?
Fandango68

1つの方法は、パラメーターとして渡される任意の要素に動作を適用するユーティリティ関数を作成することです。その関数内では、要素参照はパラメーターにハードコーディングされます。次に、任意の手段で識別できる任意の数の入力要素でそれを呼び出すことができます。:-)
ジョナサンギルバート

すみません、私は初心者です。例を挙げて回答を更新していただけませんか?ありがとう
Fandango68

1
「txtCustomer」というパラメーターを受け取る関数宣言で、私が記述したコードをラップするだけです。「txtCustomer」の名前を別の名前に変更することをお勧めしますが、自信がない場合は、「txtCustomer」という名前の変数で技術的に機能します。つまり、function MakeTextBoxAutoSelect(txtCustomer){ 上記で書いたもの }
Jonathan Gilbert


1

テキストボックスがフォーカスを受け取ったときにテキストボックスのすべてのコンテンツを選択するJavaScriptまたはjQueryソリューションとは何ですか?

次の属性を追加するだけです。

onfocus="this.select()"

例えば:

<input type="text" value="sometext" onfocus="this.select()">

(正直なところ、なぜ他に何かが必要になるのかはわかりません。)



0
$('input').focus(function () {
    var self = $(this);
    setTimeout(function () {
        self.select();
    }, 1);        
});

編集:@DavidGのリクエストによると、これが機能する理由がわからないため、詳細を提供することはできませんが、それは、フォーカスイベントが上または下に伝搬すること、および通知を取得する入力要素と関係があると思いますそれはフォーカスを受けています。タイムアウトを設定すると、要素がそれを実行したことを認識するための時間が与えられます。


単にコードを貼り付けるのではなく、答えを説明してください。
DavidG

0

イベントをつなぎ合わせると.one、このスレッドの他の場所で提案されているように使用する必要がなくなると思います。

例:

$('input.your_element').focus( function () {
    $(this).select().mouseup( function (e) {
        e.preventDefault();
    });
});

0

注:ASP.NETでプログラミングしている場合は、C#でScriptManager.RegisterStartupScriptを使用してスクリプトを実行できます。

ScriptManager.RegisterStartupScript(txtField, txtField.GetType(), txtField.AccessKey, "$('#MainContent_txtField').focus(function() { $(this).select(); });", true );

または、他の回答で提案されているHTMLページにスクリプトを入力します。


質問にはASP.NETはありません。:|
Mohamed Thaufeeq 2017

確かに、プログラマがASP.NETを使用している場合に備えて、これを投稿しました。フレームワークを使用して回答を探している人に役立ちます(これが私を助けました)。私はただ共有しているだけで、うまくいけば誰かがそれを参考にしてくれるでしょう。
Exel Gamboa 2017

プログラマーがASP.NETを使用している場合に備えて、質問に 'asp.net'タグを追加します。:|
Mohamed Thaufeeq、2017

0

私はこれをいくつかの場所にまきました、完璧に働きます!

            $('input').on('focus', function (e) {
                $(this)
                $(element).one('mouseup', function () {
                        $(this).select();
                        return false;
                    })                        .select();
            });

0

私はパーティーに少し遅れましたが、これはIE11、Chrome、Firefoxで完全に動作します。

inputElement.addEventListener("focus", function (e) {
    var target = e.currentTarget;
    if (target) {
        target.select();
        target.addEventListener("mouseup", function _tempoMouseUp(event) {
            event.preventDefault();
            target.removeEventListener("mouseup", _tempoMouseUp);
        });
    }
});

はい、でもfocusフィールドにタブで移動すると、複数のマウスアップイベントリスナーがアタッチされているのがわかります
セバスチャン

-1

私の解決策は次のとおりです:

var mouseUp;
$(document).ready(function() {
    $(inputSelector).focus(function() {
        this.select();
    }) 
    .mousedown(function () {
        if ($(this).is(":focus")) {
          mouseUp = true;
        }
        else {
          mouseUp = false;
        }
     })
     .mouseup(function () {
        return mouseUp;
     });
});

したがって、マウスアップは通常は機能しますが、入力によってフォーカスを得た後、選択を解除しません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.