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