skoder
@skoder
web программист

Как симулировать нажатие клавиши пользователем в JavaScript?

Доброго времени. Пишу тесты для редактора текста на mocha.
Задача такая, симулировать нажатие клавиши Enter по тегу div[contenteditable]
При это надо посмотреть, что будет в этом div, после этого нажатия.
Вопрос: разрешено ли в браузере программно через события нажать клавишу в поле ввода, чтобы поле отреагировало и добавило нужный символ.
В интернете пишут так:
var keyboardEventdown= new KeyboardEvent('keydown', {bubbles:true, key: 'Enter', code: 'Enter', which: 13});
Object.defineProperty(keyboardEventdown, 'charCode', {value: 0});
Object.defineProperty(keyboardEventdown, 'which', {value: 13});
Object.defineProperty(keyboardEventdown, 'keyCode', {value: 13});
editor.dispatchEvent(keyboardEventdown)

Но я так понимаю, что это просто эмулирует событие, чтобы сработал addEventListener, но само событие реально не происходит. И этот код не работает, в textarea который я ему подаю, новая строка не появлятся.
UPD
Если кому интересно то такой вот код работает в 3-х основных браузерах, а также в phantomjs
var simulateKeyPress = function (type, keyCodeArg, element) {
        var evt = document.createEvent('HTMLEvents')
        evt.initEvent(type, true, false);
        evt.keyCode = keyCodeArg;
        evt.which = keyCodeArg;
        element.dispatchEvent(evt);
    }
    simulateKeyPress('keydown', 13, editor.editor);
  • Вопрос задан
  • 911 просмотров
Пригласить эксперта
Ответы на вопрос 1
@M-ka
frontend присматривающийся к ror
"Вопрос: разрешено ли в браузере программно через события нажать клавишу в поле ввода, чтобы поле отреагировало и добавило нужный символ."
Ответ: да, разрешено, но с оговороками и не в такой формулировке вопроса. В некоторых браузерах даже в апи предусмотрено подобное, что бы проводить автотесты.... Но все сводится к перезаписи контента с последующим вызовом нужного события или запуска события у элемента и передать в него инфы в нужной структуре (ну каждый переписывает обработчик событий под свои нужды....)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы