javascript - 当前文档处于设计模式时是否可以捕获 KeyDown 事件?

标签 javascript event-handling xhtml rich-text-editor

如您所知,大多数富文本编辑器都使用 iframe 来创建所见即所得编辑器。在 iframe 中包含处于设计模式的文档。我想捕获当用户在富文本编辑器中按“@”字符时的按键事件以显示自动完成功能。

顺便说一句,我在设计模式中看不到任何触发的事件。我该如何解决这个问题?

最佳答案

在打开 designMode 的情况下,完全可以捕获文档中的所有关键事件,尽管您必须在 Firefox 中的 document 上使用 addEventListener(以及可能的其他),而不是将您的处理程序分配给 document.onkeypress

要捕获用户键入“@”字符(或实际上任何可打印字符),您应该使用 keypress 事件而不是 keydown

// Assuming you have a reference to your iframe in a variable called 'iframe':

function handleIframeKeyPress(evt) {
    evt = evt || iframe.contentWindow.event;
    var charCode = evt.keyCode || evt.which;
    var charTyped = String.fromCharCode(charCode);
    if (charTyped === "@") {
        alert("@ typed");
    }
}

var doc = iframe.contentWindow.document;

if (doc.addEventListener) {
    doc.addEventListener("keypress", handleIframeKeyPress, false);
} else if (doc.attachEvent) {
    doc.attachEvent("onkeypress", handleIframeKeyPress);
} else {
    doc.onkeypress = handleIframeKeyPress;
}

关于javascript - 当前文档处于设计模式时是否可以捕获 KeyDown 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778393/

相关文章:

javascript - 使用 javascript 或 jQuery,检测用户是否拒绝浏览器定位计算机的请求

javascript - 如何存储图像的 src 并将其与 Cypress 中的另一个图像进行比较?

javascript - 当 "unhovering"项时重置类

javascript - 单击后,如何设置事件处理程序以在后续单击时触发?

c# - 安全地引发事件线程 - 最佳实践

eclipse - 如何通过 Eclipse IDE 在 XHTML 中使用 Facelets 开发应用程序?

javascript - Firefox 无法识别返回的 json 数组,chrome 可以

java - 向 Java Swing 应用程序添加键盘支持,无论焦点如何

javascript - 脚本标记中何时需要 CDATA 部分?

xhtml - 使用 CSS 时的 textarea cols 属性