是否可以使用Javascript / JQuery在DOM窗口上触发键事件

时间:2011-12-15 20:19:52

标签: javascript jquery events triggers keyevent

是否可以在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”,但这也无效。

非常感谢任何帮助!

提前致谢。

3 个答案:

答案 0 :(得分: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()相同。

答案 1 :(得分: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"。

答案 2 :(得分: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');
  }
});

祝你好运。