捕获按键,指向Chrome中的特定元素

时间:2012-12-09 07:24:47

标签: javascript google-chrome focus onkeypress

我正在构建一个聊天应用程序,我正在努力确保每当用户按下某个键时,他们按下的键最终会被输入到特定元素中(iframe中的可编辑HTML文档ui.rte1Content。 rteIFrame,确切地说)。无论页面上的哪个元素当前具有焦点,都应该发生这种情况。我只关心支持Firefox和Chrome。

到目前为止,我已经在window.onkeydown事件上注册了一个处理程序:

function captureKeyDown(e) {
    console.log("Capturing: " + e.keyCode);

    // We ignore certain keys such as page up, as well as keys pressed with
    // alt or ctrl, except for a few select combos like ctrl+b
    if(!ignoreKeys.contains(e.keyCode) && !e.altKey && 
      (!e.ctrlKey || (e.ctrlKey && validCtrlKeys.contains(e.keyCode)))) {
        ui.rte1Content.focus(); // Chrome prefers this.
        if(!rteHasFocus) {
            ui.rteIFrame.focus(); // Firefox prefers this
        }
        //alert("A commented out alert");
    }
}

这在Firefox中完美运行:rteIFrame获得焦点,按下的键出现,我们继续。但是,在Chrome(23.0.1271.95)中,当rte1Content正确地及时获得NEXT字母显示的焦点时,首先触发该事件的首字母将消失在以太中。

对于它的价值,如果我取消注释警告声明,这封信在Chrome中显示得很好。我不知道为什么会这样。

有没有人对如何让这个工作有任何建议?

1 个答案:

答案 0 :(得分:0)

对于“alert()事物”,这只是因为在Chrome中,当发生alert()时焦点会丢失。要测试它,尝试打开JavaScript控制台(Chrome中的CTRL + SHIFT + J,Firefox中的CTRL + SHIFT + K),选择某些内容或关注任何页面上的内容,然后在控制台alert("test");中键入,你要去看到焦点丢失了。然后在Firefox中尝试,重点保持。

此外,我觉得你正在做复杂的事情啊!为什么不使用<textarea>标签来存储键盘输入?此外,如果你计划通过使用COMET技术的iframe传递数据或者可能是一些长池等来制作聊天应用程序。我真的建议你使用谷歌WebSockets,因为你将能够进行更现代和优化的聊天有了这个。在你的情况下它也是完美的,因为你的接缝只关注Firefox和Chrome,两个正确支持WebSockets的浏览器。 :)