Остановка <select> от перехода к нажатию букв

<select size = "5">
  <option>a</option>
  <option>b</option>
  <option>c</option>
  <option>d</option>
  <option>e</option>
</select>

Естественно, когда я нажимаю a, b, c, d или e, происходит переход к варианту с этой первой буквой. Мне нужно отключить это, желательно не через Javascript (не обязательно).

Неужели нет возможности отключить эту опцию перехода к букве при нажатии клавиш?

Спасибо!

Не без JavaScript, нет. Я думаю, он встроен в элемент управления на уровне ОС.

Heretic Monkey 16.03.2018 22:39

Как это будет работать с Javascript?

Nikush 16.03.2018 22:42

Добавить обработчик keydown и запретить действие по умолчанию, если ключ - это буква? Извините, у меня нет времени написать ответ, но это то, что приходит в голову.

Heretic Monkey 16.03.2018 22:47

Я не могу придумать веских причин, чтобы запретить пользователю использовать элемент выбора с клавиатурой. Какую проблему вы пытаетесь решить?

Lee Kowalkowski 16.03.2018 23:20
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
4
126
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Вы не можете этого сделать без JavaScript.

С помощью JavaScript вам нужно будет добавить обработчик событий для события keypress, чтобы предотвратить поведение по умолчанию и остановить распространение.

С jQuery:

$("select").on("keypress", function (event) {
  event.preventDefault();
  event.stopPropagation();
});

Позаботьтесь о том, чтобы $("select") выбрал все выбранные вами входы, и вы в конечном итоге добавите этот keypress для всех из них.

Без jQuery:

<select id = "mySelect" size = "5">
  <option>a</option>
  <option>b</option>
  <option>c</option>
  <option>d</option>
  <option>e</option>
</select>

var select = document.getElementById('mySelect');
select.addEventListener ("keypress", function (event) {
  event.preventDefault();
  event.stopPropagation();
});

Рабочая рабочий пример: https://jsfiddle.net/ep3xfyc8/9/

Позднее редактирование: существует решение для достижения этой цели без JavaScript. См. Ответ Ли Ковальковски ниже.

Спасибо! В итоге я использовал JS для этого. Решение @ LeeKowalkowski было довольно изящным, но не работало для моего конкретного приложения.

Nikush 17.03.2018 16:12

Источник: https://stackoverflow.com/a/1227324/9505307

голос против принял

Кто-то оставил мне правильный ответ, а потом по какой-то причине удалил его, вот и он:

<script type = "text/javascript">
function IgnoreAlpha(e)
{
    if (!e)
    {
        e = window.event ;
    }
    if (e.keyCode >= 65 && e.keyCode <= 90) // A to Z
    {
        e.returnValue=false;
        e.cancel = true;
    }
}
</script>

<body>
    <p>
        <select id = "MySelect" name = "MySelect" onkeydown = "IgnoreAlpha(event);"">
            <option selected = "selected" value = "" />
            <option value = "A">A</option>
            <option value = "B">B</option>
            <option value = "C">C</option>
        </select>
    </p>
    </body>

Из любопытства ... зачем тебе это нужно?

Это адаптация того, что предлагает @ razvan-dimitru, но при этом JS сводится к минимуму. В каком-то смысле вам нужна только разметка для этого решения:

<select onkeyup='event.preventDefault(); event.stopPropagation();'>
  <option>a</option>
  <option>b</option>
  <option>c</option>
  <option>d</option>
  <option>e</option>
</select>

Я не думаю, что отмена события нажатия клавиши отменит событие нажатия клавиши. Я все еще могу использовать клавиатуру, чтобы изменить это значение выбора.

Lee Kowalkowski 16.03.2018 23:16

Также это отключает все события клавиатуры, которые нужно использовать в моем случае использования. Однако, спасибо!

Nikush 17.03.2018 15:58

Вы может делаете это без JavaScript.

Префикс каждой опции с помощью символа Без стыковки с нулевой шириной.

<label for = "select">Select:</label>
<select size = "5" id = "select">
  <option>&zwnj;a</option>
  <option>&zwnj;b</option>
  <option>&zwnj;c</option>
  <option>&zwnj;d</option>
  <option>&zwnj;e</option>
</select>

Если это будет отправлено в HTTP-запросе, символ &zwnj; должен игнорироваться браузером. В любом случае каждая опция должна иметь свой собственный атрибут value для целей отправки формы, и вам не нужно будет помещать символ &zwnj; в значения опции.

Отлично! Никогда раньше такого не видел.

Nikush 17.03.2018 16:13

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