这段代码用于将光标移动到输入框中当前文本的末尾,而不是默认行为(选择所有文本)。
插件格式
jQuery.fn.putCursorAtEnd = function() {
return this.each(function() {
// Cache references
var $el = $(this),
el = this;
// Only focus if input isn't already
if (!$el.is(":focus")) {
$el.focus();
}
// If this function exists... (IE 9+)
if (el.setSelectionRange) {
// Double the length because Opera is inconsistent about whether a carriage return is one character or two.
var len = $el.val().length * 2;
// Timeout seems to be required for Blink
setTimeout(function() {
el.setSelectionRange(len, len);
}, 1);
} else {
// As a fallback, replace the contents with itself
// Doesn't work in Chrome, but Chrome supports setSelectionRange
$el.val($el.val());
}
// Scroll to the bottom, in case we're in a tall textarea
// (Necessary for Firefox and Chrome)
this.scrollTop = 999999;
});
};
用法
var searchInput = $("#search");
searchInput
.putCursorAtEnd() // should be chainable
.on("focus", function() { // could be on any event
searchInput.putCursorAtEnd()
});
演示
查看 CodePen 上 Chris Coyier 的示例 将光标移动到文本区域或输入框的末尾 (@chriscoyier) 在 CodePen 上。
我认为我可能遗漏了什么,因为它表现得和任何其他输入一样。发生了什么事?
http://cl.ly/QHRK
对我来说,在 FF 30.0 上也没有任何反应。
这在您希望保留预填充内容的输入框或文本区域中很有用。调用 focus 将选择现有内容,使用此插件将把光标放在末尾,允许用户立即开始输入,同时保留内容。
您是否在使用 Cordova 制作的移动 Web 应用程序上测试过?
感谢您提供这个很棒的代码片段!
我在包含值的附加输入元素方面遇到了一些问题,因为
.focus()
会选择任何预定的值。这个代码片段让我免去了很多额外的工作。缓存
$(this)
是不是一个好主意?另外:为什么要称之为光标,而我们真正操作的是插入符号?
这在 FF 上似乎不起作用。(我用的是 FF27)
可以使用仅限CSS 的方法吗?
我在
<textarea>
的焦点上实现此行为时遇到了困难。有谁让它成功了吗?遇到此代码问题的人可以检查 DOM 中是否有其他事件冒泡。例如,如果您尝试从上箭头按键触发示例中的代码,该代码将正常运行[并将光标移动到输入字段的末尾],但随后上箭头按键将冒泡到浏览器[这会将其指向将光标移动到输入字段的开头]。
在触发示例代码的事件中调用 preventDefault() 来测试这是否是您的问题。
否则,正如您从 CodePen 示例中看到的,此代码适用于 Chrome/Firefox/Safari/IE 的最广泛使用的版本(截至 2015 年 5 月)。
在 FF 40 上不起作用
适用于 FF 41.0.2、Chrome 46.0.2490.71 m
谢谢
适用于 Tizen Wearable。谢谢!
我认为此链接给出了简短而明了的答案(我已经尝试过了)
http://stackoverflow.com/questions/1056359/set-mouse-focus-and-move-cursor-to-end-of-input-using-jquery
我渴望知道上面提供的解决方案缺少什么。
谢谢
这只在您在 html 的输入标签之后引用 JS 代码时才有效
// 将光标放在输入框的末尾并聚焦它。
var val = $(‘input’).val();
input.removeAttr(‘value’).attr(‘value’, val).focus();
将此代码放在 body 标签关闭之前的一个 script 标签中。这是经过测试的有效代码,我们正在我们的网站上使用它。[需要 JQUERY]
我认为所有代码都可以用以下代码替换
在 Chrome 79.0.3945.79 上失败
如果文本溢出,则在 Chrome 和 Edge 上不起作用。
它今天帮我省了很多时间。我过去几个小时一直在努力在 Android Chrome 浏览器中设置文本光标位置。
谢谢