select接收焦点时的文本框的所有内容(Vanilla JS或jQuery)
当文本框获得焦点时,什么是Vanilla JS或jQuery解决scheme将select文本框的所有内容?
$(document).ready(function() { $("input:text").focus(function() { $(this).select(); } ); });
<input type="text" onfocus="this.select();" onmouseup="return false;" value="test" />
$(document).ready(function() { $("input:text") .focus(function () { $(this).select(); } ) .mouseup(function (e) {e.preventDefault(); }); });
$(document).ready(function() { $("input[type=text]").focus().select(); });
这不仅仅是一个Chrome / Safari的问题,我经历了一个非常类似于Firefox 18.0.1的行为。 有趣的是,这不会发生在MSIE上! 这里的问题是第一个强制取消input内容的mouseup事件,所以忽略第一个事件。
$(':text').focus(function(){ $(this).one('mouseup', function(event){ event.preventDefault(); }).select(); });
timeOut方法导致一个奇怪的行为,并阻止每个鼠标事件,你不能删除select再次点击input元素。
ü疯狂的家伙… jquery不是JavaScript,在某些情况下更容易使用。
看看这个例子:
<textarea rows="10" cols="50" onclick="this.focus();this.select()">Text is here</textarea>
来自Css trics
我的解决scheme是使用超时。 似乎工作正常
$('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
这里的答案帮了我一点,但是当点击Chrome中的向上/向下button时,我在HTML5数字input字段中遇到了问题。
如果您单击其中一个button,并将鼠标hover在button上,数字将保持不断变化,就像您按住鼠标button一样,因为鼠标hover在被丢弃。
我解决了这个通过删除mouseup处理程序,一旦它被触发如下:
$("input:number").focus(function () { var $elem = $(this); $elem.select().mouseup(function (e) { e.preventDefault(); $elem.unbind(e.type); }); });
希望这有助于未来的人们
我知道内联代码是不好的风格,但我不想把它放到.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>
这将工作,试试这个 –
<input id="textField1" onfocus="this.select()" onmouseup="return false" />
在Safari / IE 9和Chrome中工作,虽然我没有得到在Firefoxtesting的机会。
通过结合几个函数调用,我能够稍微改进Zach的答案。 这个答案的问题是,它完全禁用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>
这比Zach的答案略有改善。 它在IE中完美工作,在Chrome中完全不起作用,并且在FireFox(从字面上看,每隔一段时间)就交替成功地工作。 如果有人知道如何使它在FF或Chrome中可靠地工作,请分享。
无论如何,我想我会分享我能做的更好的一点。
像@Travis和@Mari,我想在用户点击时自动select,这意味着阻止mouseup
事件的默认行为,但不阻止用户点击。 我在IE11,Chrome 45,Opera 32和Firefox 29(这些是我目前已经安装的浏览器)下工作的解决scheme是基于鼠标单击中涉及的事件序列。
当你点击一个没有焦点的文本input时,你会得到这些事件(除其他外):
-
mousedown
:回应你的点击。 默认处理将在必要时提高focus
并设置select开始。 -
focus
:作为默认处理的一部分。 -
mouseup
:点击的完成,其默认处理将设置select结束。
当你点击一个已经有焦点的文本input时, focus
事件被跳过。 正如@Travis和@Mari一样,敏锐地注意到,只有在focus
事件发生时,才能防止mouseup
的默认处理。 然而,由于没有“ focus
没有发生”的事件,我们需要推断这一点,我们可以在mousedown
处理程序中做。
@ Mari的解决scheme要求导入jQuery,这是我想要避免的。 @ Travis的解决scheme通过检查document.activeElement
。 我不知道为什么他的解决scheme不适用于所有的浏览器,但还有另外一种方法来跟踪文本input是否有焦点:只需按照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; };
我希望这对某个人有帮助。 🙂
我知道这里已经有很多答案了 – 但是这个到目前为止是缺less的。 一个解决scheme,也与阿贾克斯生成的内容一起工作:
$(function (){ $(document).on("focus", "input:text", function() { $(this).select(); }); });
onclick="this.focus();this.select()"
什么是JavaScript或jQuery解决scheme,当文本框获得焦点时将select文本框的所有内容?
您只需添加以下属性:
onfocus="this.select()"
例如:
<input type="text" value="sometext" onfocus="this.select()">
(老实说,我不知道为什么你需要别的东西。)
$('input').focus(function () { var self = $(this); setTimeout(function () { self.select(); }, 1); });
编辑:Per @ DavidG的请求,我不能提供详细信息,因为我不知道为什么这个工作,但我相信这是有关的事件向上或向下传播的焦点事件或任何它和input元素得到通知它受到关注。 设置超时会让元素有一点时间来实现。
如果将事件链接在一起,我相信它消除了使用.one
的需要,正如本主题中其他地方所build议的那样。
例:
$('input.your_element').focus( function () { $(this).select().mouseup( function (e) { e.preventDefault(); }); });
注意:如果您使用ASP.NET进行编程,则可以使用C#中的ScriptManager.RegisterStartupScript运行脚本:
ScriptManager.RegisterStartupScript(txtField, txtField.GetType(), txtField.AccessKey, "$('#MainContent_txtField').focus(function() { $(this).select(); });", true );
或者只是在其他答案中build议的HTML页面中input脚本。
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 => this.selectAllValue.bind(this, e.target)} />
在与你的function相同的组件 –
selectAllValue(quantity) { quantity.select(); }
我把这个播种在哪里,完美地工作!
$('input').on('focus', function (e) { $(this) $(element).one('mouseup', function () { $(this).select(); return false; }) .select(); });
这工作对我来说(张贴,因为它不是在答案,但在评论)
$("#textBox").focus().select();
我的解决scheme是:
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; }); });
所以mouseup通常会起作用,但是在input焦点后不会取消select