2016-10-15 2 views
4

Я пытаюсь имитировать ключевое событие (нажмите) на Chrome 53. Все решения, которые я нашел на StackOverflow, кажется, не работает ..Javascript - имитировать ключевые события на Chrome 53

Моя цель состоит в том, чтобы иметь функцию, которая получает keyCode и имитирует нажатие клавиши с ней - Pure JS требуется

function keyPressSimulate(keyCode) {...?} 

образцы кода, которые я уже пробовали:

Node.prototype.fire=function(type,options){ 
    var event=new CustomEvent(type); 
    for(var p in options){ 
     event[p]=options[p]; 
    } 
    this.dispatchEvent(event); 
} 

document.fire("keyup",{ctrlKey:true,keyCode:90,bubbles:true}) 

Еще один:

presskey: function(k) { 
       var e = new Event("keydown"); 
       e.keyCode= k; 
       e.which=e.keyCode; 
       e.altKey=false; 
       e.ctrlKey=true; 
       e.shiftKey=false; 
       e.metaKey=false; 
       document.dispatchEvent(e); 
      } 

И:

var e = new KeyboardEvent("keydown", {bubbles : true, cancelable : true, key : "Q", shiftKey : true}); 
global.document.dispatchEvent(e); 

И:

presskey: function(k) { 
      var keyboardEvent = document.createEvent("KeyboardEvent"); 

      var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent"; 


      keyboardEvent[initMethod](
           "keydown", 
           true,  // bubbles oOooOOo0 
           true,  // cancelable 
           window, // view 
           false,  // ctrlKeyArg 
           false,  // altKeyArg 
           false,  // shiftKeyArg 
           false,  // metaKeyArg 
           k, 
           0   // charCode 
      ); 

      global.document.activeElement.dispatchEvent(keyboardEvent); 
     } 
+0

Я нашел много возможных решений здесь: http://stackoverflow.com/questions/10455626/keydown-simulation-in-chrome-fires-normally-but-not-the-correct-key И никто из них не работал me –

+0

Решение должно быть в чистом js –

+0

Я не хочу быть грубым, но я не уверен, что кто-то поможет, пока вы не проявите больше усилий с вашей стороны ... – evolutionxbox

ответ

1

Свойство keyCode устарела и не может быть установлен при использовании выделенного KeyboardEvent

Однако, вы можете использовать пользовательское событие и установить любое свойство, которое вы хотите использовать в качестве двухступенчатой ​​операции (оно будет игнорироваться при использовании в конструкторе):

<div id="test" onkeydown="this.textContent = event.keyCode;"></div> 
<button onclick=" 
    var e = new Event('keydown'); 
    e.keyCode = 42; 
    document.getElementById('test').dispatchEvent(e); 
    ">click me</button> 

Редактировать согласно комментариям Событие срабатывает от взаимодействия с пользователем таргетинга конкретный элемент в документе.

Например, пользователь, нажимая клавишу на клавиатуре, представляет собой последовательность событий (keydown, keyup, keypress). Некоторые из них захватываются браузером, чтобы заполнить значение поля ввода, а затем они передаются в Javascript как события. Невозможно эмулировать пользователя, ударяющего ключ из изолированной песочницы Javascript, за исключением того, чтобы сделать это вручную (1) определить, где находится фокус, (2) обновить свойства сосредоточенного элемента на основе поведения браузера по умолчанию и затем (3) инициирует соответствующие события на целевом элементе.

+0

Похоже, я уже пробовал это в своих примерах кода. Может быть, я делаю что-то неправильно. Можете ли вы привести пример кода? –

+0

Я отредактировал мой ответ с рабочим примером на Chrome 53.0 – Simon

+0

Не работал для меня. например, попробовал даже на странице поиска Google: 'var e = new Event ('keydown'); e.keyCode = 42; document.getElementById ('lst-ib'). dispatchEvent (e); ' И ничего ... –