Можно ли вызвать ключевое событие в окне DOM с помощью Javascript / JQuery - PullRequest
4 голосов
/ 16 декабря 2011

возможно ли вызвать ключевое событие на DOMWindow или DOMDocument в javascript? По сути, я создаю расширение для браузера для взаимодействия с веб-сайтом, и у них есть быстрые ключевые события (аналогичные GMail) при выполнении определенных действий. Я нашел другие публикации о том, как правильно запускать ключевые события ( Определенный способ инициировать события нажатия клавиш с помощью 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 ]

6 голосов
/ 16 декабря 2011

Я знаю, что вы можете передавать дополнительные аргументы при использовании 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/ (смотрите журналы на вашей консоли)

Код из предоставленного вами ответа на стековый поток работает нормально:

Для захвата:

$(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 голос
/ 11 июля 2017

Попробуйте:

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».

0 голосов
/ 19 июня 2016
//::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');
  }
});

Удачи.

...