Я хотел бы, чтобы браузер действовал так, как если бы пользователь нажимал клавишу Tab, когда он что-то нажимал. В обработчике кликов я пробовал следующие подходы:
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 0);
this.input.focus()[0].dispatchEvent(event);
И jQuery:
this.input.focus().trigger({ type : 'keypress', which : 9 });
... который я взял из здесь.
Первый подход кажется лучшим, но он не совсем работает. Если я изменю последние два параметра на 98, 98, действительно, в поле ввода будет введена буква «b». Но 9, 0 и 9, 9 (первый из которых я взял прямо с веб-сайта MDC) дают мне эти ошибки в firebug под FF3:
Permission denied to get property XULElement.popupOpen
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.overrideValue
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to set property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Я слышал, что такие (без четкого определения «такие») события являются «ненадежными», что может объяснить эти ошибки.
Второй подход приводит к тому, что любое значение, которое я помещаю как event. which, передается как event. which, но безрезультатно (даже если я использую 98 вместо 9, в поле не будет введена буква «b».) Если я попытаюсь установить событие .data в объекте, который я передаю, он становится неопределенным при запуске события. Далее следует код, который я использую для просмотра:
$('#hi').keypress(function(e) {
console.log(e);
});
Любые другие идеи?
untrusted
событий - person Dmitry Pashkevich   schedule 19.09.2012...firing an event doesn't trigger the default result of the user action, for security reasons...
- person Dmitry Pashkevich   schedule 19.09.2012