4

Я пытаюсь имитировать нажатия клавиш в веб-приложении, это для встроенной системы, но использует браузер, основанный на Webkit. Я проверил код в Chrome и получил ту же ошибку.Как document.createEvent должен работать с ключевыми событиями?

Я попытался использовать фрагменты кода из этого примера от Yahoo, но я продолжаю получать ту же ошибку при запуске события с помощью dispatchEvent. «target» - это элемент HTML в дереве DOM.

function fireEvent(target) { 
    var evt = document.createEvent("UIEvent"); 
    evt.initEvent("keypress", true, true); 
    target.dispatchEvent(evt); 
} 

Он всегда бросает «Ошибка: UNSPECIFIED_EVENT_TYPE_ERR: события DOM Exception 0», я попытался CreateEvent («События»), а также, и это всегда сводится к тому же исключения. Как на встроенной системе, так и в Chrome.

+1

ли вызов 'dispatchEvent' отсутствует' evt' параметр? – Phrogz

+0

UIEvents, а не UIEvent. – Ashe

ответ

3

Хорошо, при проведении дальнейших испытаний казалось, что когда все ключевые параметры события были правильно инициализированы, диспетчер отправки работал без исключения исключения.

Следующий код работает.

function fireEvent(target) { 
    var evt = document.createEvent("Events"); 
    evt.initEvent("keypress", true, true); 

    evt.view = window; 
    evt.altKey = false; 
    evt.ctrlKey = false; 
    evt.shiftKey = false; 
    evt.metaKey = false; 
    evt.keyCode = 0; 
    evt.charCode = 'a'; 

    target.dispatchEvent(evt); 
} 
2

Keypress is UIEvent. Вы должны использовать initUIEvent('type', bubbles, cancelable, windowObject, detail), а не initEvent(). Но для firefox, который реализует keyEvents, вы должны создать KeyEvents и initKeyEvents().

0

Это старый поток, просто для его обновления. Я добавляю еще один ответ, чтобы он имел смысл для любого.

initEvent() устарел Он по-прежнему поддерживается в некоторых браузерах, но избегает его использования.

Существует более краткий способ создавать события, как этого

function fireEvent(target) { 
    var event = new Event('build'); 

    // Listen for the event. 
    target.addEventListener('build', function (e) { ... }, false); 

    // Dispatch the event. 
    target.dispatchEvent(event); 
} 

Чтобы добавить данные объекта события, интерфейс CustomEvent существует и свойство детали может быть использовано для передачи пользовательских данных. Например, событие может быть создан следующим образом:

var event = new CustomEvent('build', { 'detail': target.dataset.time }); 

Ссылка: Creating and Triggering Events

Смежные вопросы