Javascript 更改textarea onclick的值会将插入符号置于一个奇怪的位置,但仅在IE中

Javascript 更改textarea onclick的值会将插入符号置于一个奇怪的位置,但仅在IE中,javascript,event-handling,Javascript,Event Handling,我有一个文本区域,在页面加载时有默认文本“列表”。在焦点上,此文本被删除并替换为“-”。我希望插入符号的位置在“-”之后,这适用于chrome、opera、FF和safari,但在IE中,插入符号最初位于正确的位置,但稍作停顿后跳到“-”之前 以下是我一直使用的代码: input.onfocus = function(){ if(this.value == 'List') { this.value = '-'; } } 我

我有一个文本区域,在页面加载时有默认文本“列表”。在焦点上,此文本被删除并替换为“-”。我希望插入符号的位置在“-”之后,这适用于chrome、opera、FF和safari,但在IE中,插入符号最初位于正确的位置,但稍作停顿后跳到“-”之前

以下是我一直使用的代码:

    input.onfocus = function(){
        if(this.value == 'List') {
            this.value = '-';
        }
    }
我也尝试过使用
onclick
事件,在插入“-”之后使用类似
this.value=this.value
的技巧,但这些都不起作用。如果有人能为我提供一份工作,我将不胜感激

谢谢大家!

编辑: Kierans下面的答案解决了问题,完美!添加到代码中的if语句会停止chrome抛出一个小错误:

    input.onclick = function(){
        if(this.value == 'List') {
            this.value = "-";
            if (this.createTextRange) {
                var range = this.createTextRange();
                var caretPos = this.value.length;
                range.move('character', caretPos);
                range.select();
            }
        }
    }

我在Firefox、Chrome和IE中尝试了一个简单的代码片段。我在IE中遇到了同样的问题,因此我们可以用一些代码片段设置插入符号位置,如下所示:

<input type="text" value="List" onfocus="changeValue(this);"/>
function changeValue(e){
    if(e.value == "List"){
            e.value = "-";
           var range = e.createTextRange();
            var caretPos = e.value.length;
            range.move('character', caretPos);
            range.select();
    }
}

函数值(e){
如果(例如,值=“列表”){
e、 value=“-”;
var range=e.createTextRange();
var caretPos=e.value.length;
range.move('character',caretPos);
range.select();
}
}
因此,上面的代码运行良好

有关参考信息,请参见url:


注意:以上代码在FireFox6、Chrome、IE9中进行了测试。希望这对您有所帮助。:-)

下面是根据我对一个问题的回答改编的。它适用于所有主要浏览器,并解决了Chrome中的一个问题,即防止插入符号定位在
焦点中
事件:

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

input.onfocus = function() {
    if (input.value == 'List') {
        input.value = '-';
    }

    moveCaretToEnd(input);

    // Work around Chrome's little problem
    window.setTimeout(function() {
        moveCaretToEnd(input);
    }, 1);
};

谢谢你的回答和例子!我对你的代码做了一点修改,因为chrome不喜欢createTextRange(),它将作为“编辑到问题”发布
createTextRange()
仅适用于IE(可能还有Opera)。在除IE<9以外的所有浏览器中使用
setSelectionRange()
selectionStart
selectionEnd
属性。