单击时selectHTML文本input中的所有文本
我有以下代码在HTML网页中显示文本框。
<input type="text" id="userid" name="userid" value="Please enter the user ID" />
当页面显示时,文本包含请input用户ID消息。 不过,我发现用户需要点击3次才能select所有文本(在这种情况下请input用户名 )。
只需点击一下就可以select整个文本吗?
编辑:
对不起,我忘了说:我必须使用input type="text"
你可以使用这个JavaScript片段:
<input onClick="this.select();" value="Sample Text" />
但显然它不适用于移动Safari。 在这些情况下,您可以使用:
<input onClick="this.setSelectionRange(0, this.value.length)" value="Sample Text" />
以前发布的解决scheme有两个怪癖:
- 在Chrome中,通过.select()进行的select不会停留 – 添加轻微超时可以解决此问题。
- 聚焦后将光标置于所需的点是不可能的。
这是一个完整的解决scheme,select焦点上的所有文本,但允许在焦点后select特定的光标点。
$(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(); }, 50); //select all text in any field on focus for easy re-entry. Delay sightly to allow focus to "stick" before selecting. }); });
Html(你必须把onclick属性放在你希望在页面上工作的每个input上)
<input type="text" value="click the input to select" onclick="this.select();"/>
或更好的select
jQuery(这将适用于页面上的每个文本input,无需更改您的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>
我知道这是旧的,但最好的select是现在使用新的placeholder
HTML属性,如果可能的话:
<input type="text" id="userid" name="userid" placeholder="Please enter the user ID" />
这将导致文本显示,除非input一个值,不需要select文本或清除input。
列出的答案是根据我的部分。 我在下面链接了两个如何在Angular和JQuery中实现这个function的例子。
此解决scheme具有以下function:
- 适用于支持JQuery,Safari,Chrome,IE,Firefox等的所有浏览器
- 适用于Phonegap / Cordova:Android和IO。
- 只有在input获得焦点后才select全部,直到下一个模糊再聚焦
- 可以使用多个input,它不会出现问题。
- Angular指令具有很好的重用性,只需添加指令select-all-on-click即可
- JQuery可以很容易地修改
JQuery: http ://plnkr.co/edit/VZ0o2FJQHTmOMfSPRqpH? p=preview
$("input").blur(function() { if ($(this).attr("data-selected-all")) { //Remove atribute to allow select all again on focus $(this).removeAttr("data-selected-all"); } }); $("input").click(function() { if (!$(this).attr("data-selected-all")) { try { $(this).selectionStart = 0; $(this).selectionEnd = $(this).value.length + 1; //add atribute allowing normal selecting post focus $(this).attr("data-selected-all", true); } catch (err) { $(this).select(); //add atribute allowing normal selecting post focus $(this).attr("data-selected-all", true); } } });
Angular: http : //plnkr.co/edit/llcyAf?p=preview
var app = angular.module('app', []); //add select-all-on-click to any input to use directive app.directive('selectAllOnClick', [function() { return { restrict: 'A', link: function(scope, element, attrs) { var hasSelectedAll = false; element.on('click', function($event) { if (!hasSelectedAll) { try { //IOs, Safari, thows exception on Chrome etc this.selectionStart = 0; this.selectionEnd = this.value.length + 1; hasSelectedAll = true; } catch (err) { //Non IOs option if not supported, eg Chrome this.select(); hasSelectedAll = true; } } }); //On blur reset hasSelectedAll to allow full select element.on('blur', function($event) { hasSelectedAll = false; }); } }; }]);
尝试:
onclick="this.select()"
这对我很好。
您始终可以使用document.execCommand
( 在所有主stream浏览器中都支持 )
document.execCommand("selectall",null,false);
select当前焦点元素中的所有文本。
确实,使用onclick="this.select();"
但记住不要将它与disabled="disabled"
结合起来 – 它不会工作,那么您将需要手动select或者多次点击来select。 如果要locking要select的内容值,请将其与readonly
属性结合使用。
input自动对焦,带有onfocus事件:
<INPUT onfocus="this.select()" TYPE="TEXT" NAME="thing" autofocus>
这使您可以select所需的元素来打开表单。 它通过使用自动对焦命中input,然后发送自己的onfocus事件,然后select文本。
这是Shoban的答案的可重用版本:
<input type="text" id="userid" name="userid" value="Please enter the user ID" onfocus="Clear(this);" /> function Clear(elem) { elem.value=''; }
这样,你可以重复使用清除脚本的多个元素。
那么这是一个TextBox的正常活动。
点击1 – 设置焦点
点击2/3 (双击) – select文本
您可以在页面首次加载时将焦点设置在TextBox上,以将“select”减less为单个双击事件。
捕获点击事件的问题是,文本中的每个后续点击都会再次选中,而用户可能期望重新定位光标。
什么对我来说是声明一个variables,selectSearchTextOnClick,并将其设置为true默认情况下。 点击处理程序检查variables是否仍然为真:如果是,则将其设置为false并执行select()。 然后我有一个模糊事件处理程序将其设置为true。
目前的结果看起来像我期望的行为。
(编辑:我忽略说,我试图捕捉焦点事件,因为有人build议,但这是行不通的:焦点事件触发后,点击事件可以触发,立即取消select文本)。
在.select()在移动平台上不起作用时,此问题有以下选项:以编程方式在iOS设备上的input字段中select文本(移动Safari)
在input字段中使用“占位符”而不是“值”。
Html like this <input type="text" value="click the input to select" onclick="javascript:textSelector(this)"/>
和没有绑定的JavaScript代码
function textSelector(ele){ $(ele).select(); }
你问的确切解决scheme是:
<input type="text" id="userid" name="userid" value="Please enter the user ID" onClick="this.setSelectionRange(0, this.value.length)"/>
但是我想,你正试图在input中显示“请input用户名”作为占位符或提示。 所以,您可以使用以下作为更有效的解决scheme:
<input type="text" id="userid" name="userid" placeholder="Please enter the user ID" />
如果您正在使用AngularJS,则可以使用自定义指令轻松访问:
define(['angular'], function () { angular.module("selectionHelper", []) .directive('selectOnClick', function () { return { restrict: 'A', link: function (scope, element, attrs) { element.on('click', function () { this.select(); }); } }; }); });
现在可以像这样使用它:
<input type="text" select-on-click ... />
示例是requirejs – 所以如果使用别的东西,第一行和最后一行可以跳过。
如果有人想在页面加载瓦特/ jQuery(甜的search字段)这是我的解决scheme
jQuery.fn.focusAndSelect = function() { return this.each(function() { $(this).focus(); if (this.setSelectionRange) { var len = $(this).val().length * 2; this.setSelectionRange(0, len); } else { $(this).val($(this).val()); } this.scrollTop = 999999; }); }; (function ($) { $('#input').focusAndSelect(); })(jQuery);
基于这个职位。 感谢CSS-Tricks.com
如果您只是试图让占位符文本在用户select元素时被replace,那么现在最好使用placeholder
属性。 然而,如果你想select所有的当前值,当一个领域获得焦点时,@Cory House和@Toastrackenigma答案的组合似乎是最经典的。 使用focus
和focusout
事件,设置/释放当前焦点元素的处理程序,以及聚焦时全部select。 一个angular2 / typescript的例子如下(但将转换为香草js是微不足道的):
模板:
<input type="text" (focus)="focus()" (focusout)="focusout()" ... >
零件:
private focused = false; public focusout = (): void => { this.focused = false; }; public focus = (): void => { if(this.focused) return; this.focused = true; // Timeout for cross browser compatibility (Chrome) setTimeout(() => { document.execCommand('selectall', null, false); }); };