2016-06-03 6 views
0

Я новичок в Javascript, хотя я хорошо использовал JQuery. Но я не могу найти лучшую документацию для этого. Событие клика должно запускаться только при нажатии клавиши ввода. поэтому мне нужно написать тестовый пример для этого сценария.Как установить значение ключевого кода при запуске события нажатия клавиши вручную в чистом javascript?

function btnRepeatKeyDownEvent(e){ 
     if (e.keyCode === 13) { 
      this.trigger('click', e); 
     } 
} 

пока что я нашел это решение.

let keyboardEvent: KeyboardEvent = new KeyboardEvent('keypress', {'key': 'Enter'}); 
document.dispatchEvent(keyboardEvent); 

, но приведенный выше код всегда дает значение кодового обозначения как 0. Я больше устал от поиска решения. В соответствии с MDN большинство функций устарело. Мне нужно сделать этот тестовый чехол работоспособным в chrome, firefox и IE11 + только для старых браузеров. Пожалуйста, помогите мне.

ответ

1

KeyCode и другие свойства доступны только для чтения. Таким образом, вы можете подделать его, воспользовавшись Object.defineProperties в JavaScript функцию, которая делает перезаписать значения:

function makeKeyPressEvent(keyName, keyCode, charCode){ 
    var event = new KeyboardEvent('keypress'); 
    Object.defineProperties(event, { 
     charCode: {value: charCode}, 
     keyCode: {value: keyCode}, 
     keyIdentifier: {value: keyName}, 
     which: {value: keyCode} 
    }); 
    return event; 
} 

вот как его использовать:

window.addEventListener('keypress', function(event){console.log('key pressed!', event.keyIdentifier, event.keyCode, event.charCode, event)}, true); 

var enterKeyEvent = makeKeyPressEvent('Enter', 13, 13); 

window.dispatchEvent(enterKeyEvent); 
+0

TypeError: Попытка изменить механизм доступа к неконфигурируемое свойство в phantomJs - :( –