我有一个textarea
可以将英语转换为印地语onkeyup
事件。但是,当我将插入符号向后移动以进行编辑时,我键入的第一个字母将转换为北印度语,而插入符号将移动到字符串的末尾。是否可以将插入符号存储在textarea
中的同一点,以使其不会移动到字符串的末尾?
最佳答案
这样做的问题是,您每次按下键都会覆盖textarea的值,这就是使插入符号移动的原因。
在替换文本之前,您将需要获得插入符号的值,并在替换后再次设置它。
Stackoverflow Answer: Get Caret Position-以下链接答案中的代码未更改
function getCaret(el) {
if (el.selectionStart) {
return el.selectionStart;
} else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r == null) {
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
Stackoverflow Answer: Set Caret Position-以下链接答案中的代码未更改
function SetCursorPosition(pos)
{
// HERE txt is the text field name
var obj=document.getElementById('<%= txt.ClientID %><%= txt.ClientID %>');
//FOR IE
if(obj.setSelectionRange)
{
obj.focus();
obj.setSelectionRange(pos,pos);
}
// For Firefox
else if (obj.createTextRange)
{
var range = obj.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
通过避免替换按键事件中的所有文本并将其移至按下按钮,模糊/散焦或其他某种方式,还有其他一些方法可以解决此问题。这使您不必担心插入符位置重置到最后。
我看到转移到另一个事件以触发文本更改的唯一真正缺点是,它不是瞬时的。
关于javascript - 如何使textarea可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796903/