テキストボックスがフォーカスを受け取ったときにテキストボックスのすべてのコンテンツを選択するVanilla JSまたはjQueryソリューションとは何ですか?
テキストボックスがフォーカスを受け取ったときにテキストボックスのすべてのコンテンツを選択するVanilla JSまたはjQueryソリューションとは何ですか?
回答:
$(document).ready(function() {
$("input:text").focus(function() { $(this).select(); } );
});
<input type="text" onfocus="this.select();" onmouseup="return false;" value="test" />
onmouseup="return false;"
、ユーザーがテキストを自由に選択および編集できるようにする場合は追加しないでください。このコードを使用すると、テキストは「すべて選択」の状態にロックされ、ユーザーが新しいテキストを入力するか、矢印キーを使用して移動しない限り、ユーザーはテキストを編集できません。正直なところ、これは非常に奇妙な動作のように感じられ、テキストボックスを永続的に編集不可能にする(つまり無効にする)ことを意図しない限り、意味がありません。
onmouseup="return false;"
には、ユーザーが最初にクリックまたはタブしたときに選択が発生するようにするだけの場合は必要ありません。そして、バニラJavaScriptの+1!
$(document).ready(function() {
$("input[type=text]").focus().select();
});
$(document).ready(function() {
$("input:text")
.focus(function () { $(this).select(); } )
.mouseup(function (e) {e.preventDefault(); });
});
mouseup
イベントのデフォルトを防止することの1つの欠点を示しています。焦点を当ててテキスト全体を選択することが望ましい状況では、それはおそらく2つの悪のうちの小さい方です。」
jQueryは、場合によっては使いやすいJavaScriptではありません。
この例を見てください:
<textarea rows="10" cols="50" onclick="this.focus();this.select()">Text is here</textarea>
これは単なるChrome / Safariの問題ではなく、Firefox 18.0.1でも非常によく似た動作が発生しました。おもしろいのは、これはMSIEでは発生しないことです。ここでの問題は、入力コンテンツの選択を強制的に解除する最初のマウスアップイベントです。最初の発生を無視してください。
$(':text').focus(function(){
$(this).one('mouseup', function(event){
event.preventDefault();
}).select();
});
timeOutアプローチは奇妙な動作を引き起こし、すべてのmouseupイベントをブロックすると、入力要素をもう一度クリックして選択を削除することはできません。
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()}
/>
onFocus={(e) => e.target.select()}
私の解決策は、タイムアウトを使用することです。うまくいくようです
$('input[type=text]').focus(function() {
var _this = this;
setTimeout(function() {
_this.select();
}, 10);
});
これはiOSでも機能します。
<input type="text" onclick="this.focus(); this.setSelectionRange(0, 9999);" />
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select
インラインコードが悪いスタイルであることは知っていますが、これを.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>
ここでの回答はある程度役に立ちましたが、Chromeの上下ボタンをクリックすると、HTML5数値入力フィールドで問題が発生しました。
いずれかのボタンをクリックして、ボタンの上にマウスを置いたままにすると、マウスアップが放棄されたために、マウスボタンを押しているかのように番号が変化し続けます。
以下のようにトリガーされたらすぐにマウスアップハンドラーを削除して、これを解決しました。
$("input:number").focus(function () {
var $elem = $(this);
$elem.select().mouseup(function (e) {
e.preventDefault();
$elem.unbind(e.type);
});
});
これが将来の人々に役立つことを願っています...
mouseup
と、テキスト入力フィールドにのみバインドされており、number
s にはバインドされていません。したがって、この問題は発生しないはずです
これは機能します、これを試してください-
<input id="textField1" onfocus="this.select()" onmouseup="return false" />
Safari / IE 9とChromeで動作しますが、Firefoxでテストする機会がありませんでした。
いくつかの関数呼び出しを組み込むことで、ザックの答えを少し改善することができました。その答えの問題は、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で確実に機能させる方法について誰かが考えている場合は、共有してください。
とにかく、これをもう少し良くするために何ができるかを共有したいと思いました。
onMouseUp=""
とonMouseDown=""
正しいW3の規格ではありません。それらはである必要がonmouseup=""
ありonmousedown=""
ます。他のhtml属性と同様に、キャメルケースではなく小文字で記述する必要があります。
@Travisや@Mariと同様に、ユーザーがクリックしたときに自動選択する必要がありました。これは、 mouseup
イベントのが、ユーザーがクリックするのを妨げることはありません。IE11、Chrome 45、Opera 32、Firefox 29(これらは現在インストールしているブラウザーです)で機能する私が思いついたソリューションは、マウスクリックに関連する一連のイベントに基づいています。
フォーカスのないテキスト入力をクリックすると、(とりわけ)次のイベントが発生します。
mousedown
:クリックに応じて。デフォルトの処理レイズfocus
必要に応じて、選択の開始を設定します。focus
:のデフォルト処理の一部としてmousedown
。mouseup
:クリックの完了。デフォルトの処理により、選択が終了します。すでにフォーカスされているテキスト入力をクリックすると、focus
イベントはスキップされます。@Travisと@Mariの両方が気づいたように、デフォルトのの処理はmouseup
、focus
イベントが発生した場合にのみ防止する必要があります。ただし、「focus
発生しませんでした」イベントはないため、mousedown
ハンドラー内でこれを推測する必要があります。
@Mariのソリューションでは、jQueryをインポートする必要がありますが、これは避けたいです。@Travisのソリューションはを検査することでこれを行いdocument.activeElement
ます。私は正確に彼の解決策は、ブラウザ間で動作しない理由を知りませんが、テキスト入力にフォーカスがあるかどうかを追跡するための別の方法があります:単純に従うfocus
とblur
イベントを。
これは私のために働くコードです:
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;
};
これが誰かのお役に立てば幸いです。:-)
これは私にとってはうまくいきました(回答ではなくコメントであるので投稿します)
$("#textBox").focus().select();
$('input').focus(function () {
var self = $(this);
setTimeout(function () {
self.select();
}, 1);
});
編集:@DavidGのリクエストによると、これが機能する理由がわからないため、詳細を提供することはできませんが、それは、フォーカスイベントが上または下に伝搬すること、および通知を取得する入力要素と関係があると思いますそれはフォーカスを受けています。タイムアウトを設定すると、要素がそれを実行したことを認識するための時間が与えられます。
注:ASP.NETでプログラミングしている場合は、C#でScriptManager.RegisterStartupScriptを使用してスクリプトを実行できます。
ScriptManager.RegisterStartupScript(txtField, txtField.GetType(), txtField.AccessKey, "$('#MainContent_txtField').focus(function() { $(this).select(); });", true );
または、他の回答で提案されているHTMLページにスクリプトを入力します。
私はパーティーに少し遅れましたが、これは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
フィールドにタブで移動すると、複数のマウスアップイベントリスナーがアタッチされているのがわかります
私の解決策は次のとおりです:
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;
});
});
したがって、マウスアップは通常は機能しますが、入力によってフォーカスを得た後、選択を解除しません