可以在除IE之外的浏览器中准确找到KeyPress事件的位置吗?

时间:2009-11-23 03:58:29

标签: javascript event-handling

my recent question开始,我使用KeyPress事件在富文本编辑器中检测“@”字符。顺便说一句,我刚刚发现其他浏览器中的KeyPress事件,如Firefox 3.5和Google Chrome 4,在此次活动中不会返回任何位置。

为了澄清,我的位置是屏幕顶部或左侧的距离。在这种情况下,它应该是新字符和IFrame屏幕之间的距离。在IE中,我可以在事件对象中找到它,如x,y,offsetX,offsetY。

是否可以从输入的最后一个字符中找到位置?或者您有任何其他想法可以找到它。

1 个答案:

答案 0 :(得分:2)

对于输入/文本区域,您可以使用input.selectionStart / selectionEnd找到光标的当前位置。如果它是一个简单的插入按键,它将位于新角色之前。 (不要依赖它,有些浏览器既不支持IE也不支持Mozilla扩展。)

如果您的“富文本编辑器”是HTML designMode / contentEditable的东西(恐怖!)那么我猜你必须使用window.getSelection()来读取光标的位置。这更糟糕的是:

if (window.getSelection) {
    var selection= window.getSelection();
    if (selection) {
        if (selection.getRangeAt) { // Mozilla
            if (selection.rangeCount>=1) {
                var range= selection.getRangeAt(0);
                return [range.startContainer, range.startOffset];
            }
        } else if (selection.focusNode) { // Webkit
            return [selection.focusNode, selection.focusOffset];
        }
    }
}

似乎与Mozilla的designMode一起使用,尚未在其他版本中进行过测试。