Я бы хотел, чтобы браузер действовал так, как будто пользователь нажимал клавишу 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»). Если я попробуйте установить event.data в объекте, который я передаю, он заканчивается неопределенным, когда событие инициируется. Ниже приведен код, который я использую для просмотра:
$('#hi').keypress(function(e) {
console.log(e);
});
Есть еще идеи?