是否有可能在javascript中的DOMWindow或DOMDocument上触发键事件?基本上,我正在创建一个浏览器扩展程序来与网站交互,并且它们具有执行特定操作时的快捷键事件(类似于GMail)。我发现了其他有关如何正确触发键事件(Definitive way to trigger keypress events with jQuery)的帖子,但是在将键事件发送到文档/窗口时它们似乎不起作用。

到目前为止,我已经尝试过:

var evt = document.createEvent("KeyboardEvent");
evt.initKeyboardEvent("keydown", true, true, window, false, false, false, false, 0, "o".charCodeAt(0))
window.document.dispatchEvent(evt);

和jQuery实现:
$(document).trigger({ type: 'keydown', which: "0".charCodeAt(0) });

我还尝试了依次执行“keydown”,“keypress”和“keyup”,但这都不起作用。

任何帮助将不胜感激!

提前致谢。

最佳答案

我知道您在使用trigger()时可以传递额外的参数,但是我不确定您是否可以覆盖event对象的属性。您可以通过以下方式传递数据:

$(document).on('keydown keyup keypress', function (event, characterCode) {
    if (typeof(characterCode) == 'undefined') {
        characterCode = -1;
    }
    console.log('type = ' + event.type);
    console.log('characterCode = ' + characterCode);
});

这将是trigger()代码:
$(document).trigger('keydown', [ "0".charCodeAt(0) ]);

这是一个演示:http://jsfiddle.net/A7cEE/(在控制台上查看日志)

您提供的stackoverflow答案中的代码似乎正常工作:

捕获:
$(document).on('keydown', function (event) {
    console.log('type = ' + event.type);
    console.log('keyCode = ' + event.keyCode);
});

触发:
var e = jQuery.Event('keydown');
e.keyCode = "0".charCodeAt(0);
$(document).trigger(e);

演示:http://jsfiddle.net/A7cEE/1/

注意.on()是jQuery 1.7中的新功能,在这种情况下与.bind()相同。

09-13 02:43