Поведение события .focus() с Javascript

У меня есть эти три вкладки:

Поведение события .focus() с Javascript

Когда пользователь использует мышь и щелкает одну из вкладок (в данном примере «Примечания о соответствии»), соответствующий элемент на странице с вкладками получает фокус и выделяется соответствующим образом.

Поведение события .focus() с Javascript

Однако, если пользователь использует клавиатуру и нажимает клавишу Tab, чтобы выделить нужную вкладку, а затем нажимает клавишу Enter, чтобы выбрать эту вкладку, страница с вкладками получает фокус. Затем с помощью JavaScript я устанавливаю фокус на нужный элемент на этой странице с вкладками (используя метод .focus() для этого элемента), и тот же asp:DropDownList в примере ведет себя так, как будто пользователь не только выбрал элемент, но и кликнул по нему:

Поведение события .focus() с Javascript

Если вы затем нажмете Enter или Tab вручную, раскрывающийся список закроется, и элемент будет выглядеть так, как если бы пользователь щелкнул вкладку, а не с помощью клавиатуры:

Поведение события .focus() с Javascript

Итак, есть ли «простой» способ после того, как я использую метод .focus(), чтобы затем имитировать нажатие клавиши Enter или Tab, чтобы элемент имел фокус, но не запускал раскрывающийся список? Или есть другой способ, используя метод .focus() или какой-либо другой подход, чтобы предотвратить запуск раскрывающегося списка при использовании клавиатуры для навигации по странице?

Какой код вы используете в настоящее время, что заставляет его открывать раскрывающийся список?

James 18.03.2022 17:01

document.getElementById("ContentPlaceHolder1_ddlIncidents").‌​focus();

Jim Beaumont 18.03.2022 17:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поведение, о котором вы упоминаете, похоже, связано с событием нажатия клавиши. Вот пример: когда вы вводите текстовое поле, фокус должен быть на раскрывающемся списке. Когда вы нажмете ввод в текстовом поле, обратите внимание, что первый пример (с использованием нажатия клавиши) ведет себя аналогично тому, что вы сообщили. Второй пример (с использованием нажатия клавиши) не работает.

document.querySelector('#typeHere').addEventListener("keydown", (e) => {
  document.querySelector('#focusMe').focus();
});

document.querySelector('#typeHere2').addEventListener("keypress", (e) => {
  document.querySelector('#focusMe2').focus();
});
<select id='focusMe'>
  <option>Test 1</option>
  <option>Test 2</option>
  <option>Test 3</option>
</select>

<input id='typeHere' >
<br><br>
<select id='focusMe2'>
  <option>Test 1</option>
  <option>Test 2</option>
  <option>Test 3</option>
</select>

<input id='typeHere2'>

Отлично, это исправило! Я использовал «keydown» вместо «keypress». Рад, что ответ оказался действительно простым! Благодарю вас!

Jim Beaumont 18.03.2022 17:43

Не беспокойтесь, Джим. Я бы просто попросил, чтобы в следующий раз, пожалуйста, опубликуйте свой код, так как это была удачная догадка (часть, которая показала, что вы использовали keydown, была бы здесь полезна). Заботиться!

James 18.03.2022 17:47

Другие вопросы по теме