Javascript 更改textarea onclick的值会将插入符号置于一个奇怪的位置,但仅在IE中
我有一个文本区域,在页面加载时有默认文本“列表”。在焦点上,此文本被删除并替换为“-”。我希望插入符号的位置在“-”之后,这适用于chrome、opera、FF和safari,但在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 = '-'; } } 我
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
属性。