31

我在表单上有一个文本区域和一个按钮。textarea 中可能已经有一些文本。单击按钮时,我希望光标移动到文本区域中的最后一个位置。

这可能吗?

4

7 回答 7

34

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();
于 2012-08-01T10:06:06.687 回答
26

“最后一个位置”是指文本的结尾吗?

更改表单字段的“.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 中有什么可以帮助你做到这一点,但也许某处可能有一个插件?

于 2009-03-12T04:29:20.367 回答
6

你也可以这样做:

$(document).ready(function()
{
    var el = $("#myInput").get(0);

    var elemLen = el.value.length;

    el.selectionStart = elemLen;
    el.selectionEnd = elemLen;

    el.focus();
});​

此代码适用于inputtextarea。使用最新浏览器测试:Firefox 23、IE 11 和 Chrome 28。

jsFiddle在这里可用:http: //jsfiddle.net/cG9gN/1/

来源:https ://stackoverflow.com/a/12654402/114029

于 2013-08-21T04:17:56.960 回答
4

你可以使用这个https://github.com/DrPheltRight/jquery-caret

$('input').caretToEnd();
于 2013-08-13T17:52:19.687 回答
3

这是我在 onclick 或其他事件中用于 textareas 的内容,并且似乎适用于 FireFox 和 IE 7 & 8。它将光标定位在文本的末尾而不是前面。

this.value = "some text I want to pre-populate";
this.blur();
this.focus();
于 2012-09-12T15:19:22.467 回答
2

设置鼠标焦点并将光标移动到输入的末尾。它适用于每个浏览器,这里只是简单的逻辑。

input.focus();
tmpStr = input.val();
input.val('');
input.val(tmpStr);
于 2013-06-27T09:51:35.077 回答
0

我稍微修改了@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...");
于 2014-02-12T23:57:52.773 回答