单击时选择 HTML 文本输入中的所有文本

IT技术 javascript html textinput
2021-02-10 21:05:00

我有以下代码在 HTML 网页中显示文本框。

<input type="text" id="userid" name="userid" value="Please enter the user ID" />

当页面显示时,文本包含请输入用户 ID消息。但是,我发现用户需要单击 3 次才能选择所有文本(在本例中为Please enter the user ID)。

是否可以一键选择整个文本?

编辑:

对不起,我忘了说:我必须使用输入 type="text"

6个回答

您可以使用此 javascript 代码段:

<input onClick="this.select();" value="Sample Text" />

但显然它不适用于移动 Safari。在这些情况下,您可以使用:

<input onClick="this.setSelectionRange(0, this.value.length)" value="Sample Text" />
在移动 Safari 上不起作用。尝试调用 this.setSelectionRange(0, 9999) 代替。
2021-03-23 21:05:00
@DeanRadcliffe 不错!我会用this.setSelectionRange(0, this.value.length)
2021-03-25 21:05:00
关于浏览器支持的任何更新?w3schools.com/jsref/met_text_select.asp声称所有浏览器都支持它
2021-04-02 21:05:00
为了使其更通用,您可以将其this.id用作点击处理程序的参数。更好的是,您可以getElementById完全消除this作为参数传递
2021-04-08 21:05:00

之前发布的解决方案有两个怪癖:

  1. 在 Chrome 中,通过 .select() 进行的选择不会坚持 - 添加一个轻微的超时可以解决这个问题。
  2. 聚焦后不可能将光标放置在所需的点上。

这是一个完整的解决方案,它选择焦点上的所有文本,但允许在焦点后选择特定的光标点。

$(function () {
    var focusedElement;
    $(document).on('focus', 'input', function () {
        if (focusedElement == this) return; //already focused, return so user can now place cursor at specific point in input.
        focusedElement = this;
        setTimeout(function () { focusedElement.select(); }, 100); //select all text in any field on focus for easy re-entry. Delay sightly to allow focus to "stick" before selecting.
    });
});
@CoryHouse 没关系,因为通过选项卡聚焦本机选择文本!不需要javascript。
2021-03-12 21:05:00
解决方案是使用 onClick 而不是 onFocus。完美运行,不需要复杂的代码。
2021-03-16 21:05:00
@CoryHouse 即使在 4 年后您的代码也能像魅力一样工作。伙计,鞠躬。感谢这个小小的肮脏的黑客。我搜索了 2-3 天,直到找到了这个。:+1:
2021-03-28 21:05:00
0我在 chrome 和 firefox 中工作超时不知道你的超时50来自哪里
2021-04-01 21:05:00
要处理用户单击离开字段然后再次单击的情况,请添加 .on('blur', 'input', function(){focusedElement = null;})
2021-04-06 21:05:00

Html(您必须将 onclick 属性放在您希望它在页面上工作的每个输入上)

 <input type="text" value="click the input to select" onclick="this.select();"/>

或更好的选择

jQuery(这将适用于页面上的每个文本输入,无需更改您的 html):

<script  type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>  
<script type="text/javascript">
    $(function(){
        $(document).on('click','input[type=text]',function(){ this.select(); });
    });
</script>
应该可以正常工作,请确保您使用的是更新版本的 jQuery,或者在旧版本上使用 $(document).live()。
2021-03-12 21:05:00
除非用户已经拥有 jQuery,否则更好的选择不涉及添加对第三方库的依赖。
2021-03-30 21:05:00
对于那些通过表单元素进行选项卡的人来说,绑定到焦点事件可能会更好,而不是单击。
2021-04-03 21:05:00
@Andrew 这不是必需的,因为如果您使用 Tab 键浏览输入元素,则始终会选择文本。;-)
2021-04-07 21:05:00
焦点事件是有问题的,另一方面,模糊事件对于触发验证和自动保存表单非常有用,当您通过 Tab 键时也可以使用!
2021-04-07 21:05:00

我知道这是旧的,但最好的选择是现在placeholder尽可能使用新的HTML 属性:

<input type="text" id="userid" name="userid" placeholder="Please enter the user ID" />

这将导致文本显示,除非输入值,从而无需选择文本或清除输入。

请注意,占位符只允许与 doctype html 一起使用。
2021-03-25 21:05:00

您可以随时使用document.execCommand所有主要浏览器都支持

document.execCommand("selectall", null, false);

选择当前焦点元素中的所有文本。


2021 年更新:execCommand现已弃用。

老实说,这可能是最好的,因为它是其他浏览器采用的旧 IE API,使用它总是有点奇怪。尽管如此,拥有一种同时适用于<input>字段和contenteditable元素的解决方案还是很好的

.select()可能是<input>这些天田野的最佳方式

对于contenteditable现代解决方案是使用范围 API。

是的,这是我最喜欢做这种任务的方式,尤其是。因为它也适用于contenteditable元素。我认为您还可以使其更加优雅,即<input type="text" onfocus="document.execCommand('selectall')">- 非常确定您可以删除null并且false如果您不使用它们。
2021-03-16 21:05:00
@arcanemachine 干杯,谢谢你让我知道。我在帖子中添加了一条通知:)
2021-03-17 21:05:00
使用 时onfocus,在 Chrome 中单击输入时会选择整个页面。onclick工作正常。
2021-03-18 21:05:00
MDN 说execCommand现在已弃用
2021-03-20 21:05:00
这看起来是一个优雅的解决方案。完整的代码如下所示:<input type="text" onclick="document.execCommand('selectall',null,false);" />
2021-04-03 21:05:00