Я бы хотел, чтобы браузер действовал так, как если бы пользователь нажал клавишу Tab, когда они нажимают на что-то. В обработчик щелчка я попытался следующие подходы:Моделирование нажатия клавиш с помощью JavaScript
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 });
... который я взял из here.
Первый подход, кажется, лучший выбор, но не совсем работает. Если я изменил последние два параметра на 98, 98, действительно, в поле ввода вводится «b». Но 9, 0 и 9, 9 (первый из которых я взял прямо с веб-сайта МЦС) оба дают мне эти ошибки в поджигатель под 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);
});
Другие идеи?
Что вы хотите вызвать? Вы пытаетесь переместить их на следующий вход? – hunter
Да. Но следующий «вход» не обязательно является элементом ввода или другим элементом с естественным вкладом. И это не обязательно неестественно - tabstopped (т. Е. $ ("[Tabindex]")). Физически нажатая вкладка (или shift + tab) делает именно то, что я хочу ... – Kev
Спасибо. Меня интересовал только первый пример кода вашего вопроса, который действительно помог :) –