我在表单上有一个文本区域和一个按钮。textarea 中可能已经有一些文本。单击按钮时,我希望光标移动到文本区域中的最后一个位置。
这可能吗?
我在表单上有一个文本区域和一个按钮。textarea 中可能已经有一些文本。单击按钮时,我希望光标移动到文本区域中的最后一个位置。
这可能吗?
xgMz 的回答对我来说是最好的。您无需担心浏览器:
var html = $("#MyTextArea").val();
$("#MyTextArea").focus().val("").val(html);
这是我写的一个快速的 jQuery 扩展,下次我会这样做:
; (function($) {
$.fn.focusToEnd = function() {
return this.each(function() {
var v = $(this).val();
$(this).focus().val("").val(v);
});
};
})(jQuery);
像这样使用:
$("#MyTextArea").focusToEnd();
“最后一个位置”是指文本的结尾吗?
更改表单字段的“.value”会将光标移动到除 IE 之外的所有浏览器中的末尾。使用 IE,你必须弄脏你的手并故意操纵选择,使用非标准接口:
if (browserIsIE) {
var range= element.createTextRange();
range.collapse(false);
range.select();
} else {
element.focus();
var v= element.value();
element.value= '';
element.value= v;
}
或者你的意思是把光标放回原来的位置,最后一次聚焦文本区域?
在除 IE 之外的所有浏览器中,只要调用 'element.focus()' 就已经发生了这种情况;浏览器会记住每个输入的最后一个光标/选择位置并将其重新置于焦点上。
在 IE 中重现这将是相当棘手的。您必须一直轮询以检查光标/选择的位置,并记住该位置(如果它在输入元素中),然后在按下按钮时获取给定元素的位置并恢复它。这涉及对“document.selection.createRange()”的一些非常繁琐的操作。
我不知道 jQuery 中有什么可以帮助你做到这一点,但也许某处可能有一个插件?
你也可以这样做:
$(document).ready(function()
{
var el = $("#myInput").get(0);
var elemLen = el.value.length;
el.selectionStart = elemLen;
el.selectionEnd = elemLen;
el.focus();
});
此代码适用于input
和textarea
。使用最新浏览器测试:Firefox 23、IE 11 和 Chrome 28。
jsFiddle
在这里可用:http: //jsfiddle.net/cG9gN/1/
你可以使用这个https://github.com/DrPheltRight/jquery-caret
$('input').caretToEnd();
这是我在 onclick 或其他事件中用于 textareas 的内容,并且似乎适用于 FireFox 和 IE 7 & 8。它将光标定位在文本的末尾而不是前面。
this.value = "some text I want to pre-populate";
this.blur();
this.focus();
设置鼠标焦点并将光标移动到输入的末尾。它适用于每个浏览器,这里只是简单的逻辑。
input.focus();
tmpStr = input.val();
input.val('');
input.val(tmpStr);
我稍微修改了@mkaj 扩展以支持默认值
; (function($) {
$.fn.focusToEnd = function(defaultValue) {
return this.each(function() {
var prevValue = $(this).val();
if (typeof prevValue == undefined || prevValue == "") {
prevValue = defaultValue;
}
$(this).focus().val("").val(prevValue);
});
};
})(jQuery);
// See it in action here
$(element).focusToEnd("Cursor will be at my tail...");