HTML designMode,使用默认的按键处理程序以编程方式移动光标

时间:2010-07-30 14:31:12

标签: javascript designmode

虽然我已经得到了答案,但我会在这个问题上获得小额奖励。答案是不可能,我正在寻找替代解决方案或其他建议。

我正在使用HTML designMode制作一个非常自定义的编辑器。在一种情况下,我希望按下实际键一次,按键的默认操作可以完成两次。在这种情况下,我说的是DOWN键(keyCode 40)。当按下它时,我想跳过一行,将光标(|)放在下一行。像:

First li|ne
Second line
The third line

按下向下箭头键后:

First line
Second line
The third| line

我尝试过以编程方式设置按键事件,让它们被JavaScript触发,但这并不会移动光标。关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

你将无法以合理的方式做到这一点。在非IE浏览器中以编程方式移动插入符的唯一方法是使用浏览器的Selection对象,该对象没有模拟向下箭头按键的机制。

答案 1 :(得分:0)

你可以结合几种技术来做到这一点。第一个是将光标移动到文本区域中任意位置的函数:

function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    if(elem != null) {
        if(elem.createTextRange) {
            var range = elem.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(elem.selectionStart) {
                elem.focus();
                elem.setSelectionRange(caretPos, caretPos);
            }
            else
                elem.focus();
        }
    }
}

以上代码来自此blog post,我必须使用Google缓存查看。接下来,您需要找到current cursor position in the textarea

最后,使用当前光标位置,您可以获得indexOf(),相对于光标位置回车,并使用它将光标向下移动2行。

漂亮不是,但它应该有效。