我有一个表单上的文本框和一个按钮,文本框里可能已经有一些文字。当按钮被点击时,我希望光标能够移动到文本框中的最后一个位置。
这个可以实现吗?
我有一个表单上的文本框和一个按钮,文本框里可能已经有一些文字。当按钮被点击时,我希望光标能够移动到文本框中的最后一个位置。
这个可以实现吗?
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;
}
或者你是指把光标放回到先前的位置,即上次 textarea 聚焦时的位置?
在除了 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();
});
这是我在onclick或其他事件中用于文本区域的方法,在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...");