如何在TEXTAREA中设置光标? (通过不使用jQuery)

时间:2012-04-14 23:22:28

标签: javascript html firefox textarea

有没有办法在TEXTAREA标签的末尾设置光标?我正在使用Firefox 3.6,我不需要它在IE或Chrome中工作。 JavaScript还可以,但似乎所有相关的答案都在这里使用onfocus()事件,这似乎没用,因为当用户点击textarea中的任何地方时,Firefox会将光标位置设置为那里。我有一个长文本显示在textarea中,以便显示最后一部分(最后更容易添加内容)。

8 个答案:

答案 0 :(得分:16)

可能有很多方法,例如

element.focus();
element.setSelectionRange(element.value.length,element.value.length);

http://jsfiddle.net/doktormolle/GSwfW/

答案 1 :(得分:5)

自从我使用javascript而没有先查看jQuery解决方案已经很长时间了......

话虽这么说,使用javascript的最佳方法是抓住当前在textarea中的值,并将textarea的值设置为抓取的值。这总是在jQuery中起作用:

$('textarea').focus(function() {
    var theVal = $(this).val();
    $(this).val(theVal);
});

简单的javascript:

var theArea = document.getElementByName('[textareaname]');

theArea.onFocus = function(){
    var theVal = theArea.value;
    theArea.value = theVal;
}

我可能是错的。有点生锈。

答案 2 :(得分:3)

这是

的功能
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();
    }
}

[Demo] [Source]

答案 3 :(得分:2)

textarea.focus()
textarea.value+=' ';//adds a space at the end, scrolls it into view

答案 4 :(得分:1)

var t = /* get textbox element */ ;

t.onfocus = function () { 
    t.scrollTop = t.scrollHeight; 
    setTimeout(function(){ 
      t.select(); 
      t.selectionStart = t.selectionEnd; 
    }, 10); 
}

技巧是使用setTimeout在浏览器完成处理焦点事件后更改文本插入(克拉)位置;否则,我们的脚本会设置位置,然后立即通过浏览器将其设置为其他位置。

答案 5 :(得分:1)

(this.jQuery || this.Zepto).fn.focusEnd = function () {
    return this.each(function () {
        var val = this.value;
        this.focus();
        this.value = '';
        this.value = val;
    });
};

答案 6 :(得分:0)

@Molle博士的答案是正确的。仅出于增强目的,U可以与prevent-default结合使用。

http://jsfiddle.net/70des6y2/

示例:

document.getElementById("textarea").addEventListener("mousedown", e => {
  e.preventDefault();
  moveToEnd(e.target);
});
function moveToEnd(element) {
  element.focus();
  element.setSelectionRange(element.value.length, element.value.length);
}

答案 7 :(得分:0)

selectionStart 足以设置初始光标点。

def userInput = input(id: 'Proceed1', 
  submitterParameter: 'submitter', 
  message: 'Do you want to approve this step ?', 
  parameters: [booleanParam(defaultValue: true, description:'',name: 'Please confirm you agree with this'])

println userInput.submitter