2011-12-15 87 views
4

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

到目前为止,我曾尝试:

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” 在继承 “按键” 和 “KEYUP”,但没有工作。

任何帮助将不胜感激!

在此先感谢。

回答

6

我知道在使用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()

+0

嗯,你是对的,它似乎是与标准的JS工作,但不幸的是,我试图在扩展(铬,Safari和FF)运行JS和由于某种原因,关键事件被阻止。我让他们在“内容”脚本中运行。我想在扩展API中有一些阻止它们的东西。 – thiesdiggity 2011-12-15 23:13:31

0
//::jQuery:: 
//press "L" or "l" to open Bootstrap Login Modal Form 
$(document).keypress(function(evt){ 
    if (evt.charCode === 108 || evt.charCode == 76) { 
    $('#login-modal') 
     .modal('bs.modal.shown'); 
    } 
}); 

祝你好运。

1

试试这个:

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

语法:

event.initKeyEvent (type, bubbles, cancelable, viewArg, 
        ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, 
        keyCodeArg, charCodeArg) 

使用 “initKeyEvent”,而不是 “initKeyboardEvent”。

相关问题