如何在Google Chrome中的输入文本末尾设置光标位置

时间:2014-02-19 13:11:56

标签: javascript jquery html google-chrome

我正在尝试将光标设置在具有焦点功能的文本字段中。我做了一些研究,但提供的解决方案似乎都不适用于谷歌浏览器。在Internet Explorer和Firefox中,此解决方案正常运行:

js:

$('#Search').focus(function() {
  var SearchInput = $('#Search');
  var strLength= SearchInput.val().length;
  SearchInput.focus();
  SearchInput[0].setSelectionRange(strLength, strLength);
});

HTML:

<input type="text" id="Search" value="Hello World" />

这是指向jsfiddle的链接。

有没有什么方法可以在谷歌浏览器中使用它?

5 个答案:

答案 0 :(得分:19)

在聚焦输入时放置光标之前似乎会触发焦点事件,一个hacky解决方法就是使用setTimeout,如下所示:

$('#Search').focus(function() {
    setTimeout((function(el) {
        var strLength = el.value.length;
        return function() {
            if(el.setSelectionRange !== undefined) {
                el.setSelectionRange(strLength, strLength);
            } else {
                $(el).val(el.value);
            }
    }}(this)), 0);
});

试试这个小提琴: http://jsfiddle.net/esnvh/26/

编辑为0ms超时,因为@SparK指出这足以推送到执行队列的末尾。

答案 1 :(得分:6)

更新了代码

参考:http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/

IE浏览器上的

setSelectionRange is not supported,Opera&amp; Safari浏览器

我建议您制作类似的内容(适用于IE,Chrome,Safari,Firefox)。

$('#Search').on('mouseup', function() {
    var element = $(this)[0];
    if (this.setSelectionRange) {
        var len = $(this).val().length * 2;
        element.setSelectionRange(len, len);
    }
    else {
        $(this).val($(this).val());
        $(this).focus();
    }
    element.scrollTop = 9999;
});

试试这个:http://jsfiddle.net/r5UVW/4/

答案 2 :(得分:4)

使用mouseup事件:

$("#Search").mouseup(function () {
    this.setSelectionRange(this.value.length, this.value.length);    
});

答案 3 :(得分:1)

仅供参考,目前输入的数字不支持mydiv,因此快速解决方案是只使用setSelectionRange()选择文字。在桌面浏览器上,这会突出显示文本,在移动设备上,这会将光标直接移动到文本的末尾。

答案 4 :(得分:0)

没有jQuery:)

HashMaps