如果内容大于输入字段(在Chrome中),如何将光标/插入符号移动到输入字段中的最后一个字符?

时间:2014-07-10 16:10:29

标签: javascript google-chrome

目前的情况是什么:

我已经在所有浏览器中成功完成了这项工作(不要问,愚蠢的功能请求):

  1. 用户点击输入字段(具有值内容)
  2. 光标在输入内容的最后一个字符
  3. 后面跳转

    查看工作JSfiddle demo here(实现此btw有不同的可能性)。

    HTML

    <input id="test" value="Something" />
    

    JS

    function moveCaretToEnd(el) {
        if (typeof el.selectionStart == "number") {
            el.selectionStart = el.selectionEnd = el.value.length;
        } else if (typeof el.createTextRange != "undefined") {
            el.focus();
            var range = el.createTextRange();
            range.collapse(false);
            range.select();
        }
    }
    
    var textarea = document.getElementById("test");
    textarea.onfocus = function() {
        moveCaretToEnd(this);
    
        // Work around Chrome's little problem
        textarea.onmouseup = function() {
        // Prevent further mouseup intervention
        moveCaretToEnd(this);
        textarea.onmouseup = null;
        return false;
        };
    };    
    

    我想要达到的目标以及阻止的内容:

    当输入字段的内容比输入字段本身更大时,这在 Chrome 35 中不再有效,因为Chrome没有&#34;滚动&#34;到内容的结尾。众所周知,Chrome在输入字段和JS方面存在问题(这就是Chrome解决方法的原因,但它仍然无法正常工作)。它在Firefox 30中完美运行。我希望在内容大于输入字段时也可以使用它。

    问题

    为什么这在上述情况下不起作用?可能的解决办法也很不错。

1 个答案:

答案 0 :(得分:0)

我想我解决了这个问题(快速和肮脏)。请参阅full JSFiddle here

HTML

<input value="1111111111111111111111111222222222" id="test" />

JS

var elem = document.getElementById('test');
elem.focus();
elem.value = "1111111111111111111111111222222222";
elem.scrollLeft = elem.scrollWidth;