如何让textarea可编辑?

时间:2009-04-28 09:01:31

标签: javascript javascript-events textarea

我有textarea将英语转换为印地语onkeyup事件。但是当我向后移动插入符号进行编辑时,我输入的第一个字母转换为印地语,插入符号移动到字符串的末尾。是否可以将插入符号存储在textarea内的同一点,以便它不会移动到字符串的末尾?

1 个答案:

答案 0 :(得分:0)

这个问题是你要覆盖每个键的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();
    }
}

还有一些其他方法可以通过避免替换按键事件中的所有文本并将其移动到按下按钮,模糊/不聚焦或其他内容来解决此问题。这样您就不必担心任何插入位置重置到最后。

我看到移动到另一个事件来触发文本更改的唯一真正的缺点就是它不是瞬时的。