Запретить изменение значений в числовом вводе клавишами со стрелками
У меня есть элемент управления вводом на веб-странице, похожей на это:
<input type="number" name="value" />
если этот элемент управления имеет фокус, и я нажимаю клавиши со стрелками вверх или вниз, то значение в текстовом поле увеличивается или уменьшается (кроме IE). Я хотел бы отключить эту функцию, желательно с помощью CSS. У меня уже есть кнопки spinner, удаленные с помощью CSS. Я понимаю, что могу использовать JavaScript для захвата события keydown, но я хочу, чтобы клавиши со стрелками продолжали прокручивать страницу вверх или вниз.
4 ответов
нет способа сделать поведение, которое вы описываете исключительно с помощью CSS, потому что CSS обрабатывает отображение, и мы говорим о поведении и событиях клавиатуры здесь.
Я бы предложил добавить прослушиватель событий к вашему входу, который не позволит клавишам со стрелками влиять на него без фактического предотвращения прокрутки страницы с входом не в фокусе:
document.getElementById('yourInputID').addEventListener('keydown', function(e) {
if (e.which === 38 || e.which === 40) {
e.preventDefault();
}
});
Если вы хотите, чтобы клавиши со стрелками для прокрутки страницы случае, если вход в фокус, Я бы предложил использовать JQuery, который позволит вам писать меньше кода, и он будет поддерживать все браузеры.
вы можете использовать ниже код
HTML-код
<input type="number" min="1.01" max="1000" id="num"/>
в CSS
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
JavaScript:
$(document).ready(function() {
$("input[type=number]").on("focus", function() {
$(this).on("keydown", function(event) {
if (event.keyCode === 38 || event.keyCode === 40) {
event.preventDefault();
}
});
});
});
вы можете найти рабочий пример здесь: http://jsfiddle.net/649d66bb/
Я знаю, что это не тот ответ, который вы хотите услышать, но это то, что вы действительно должны делать?
просто потому, что в этом случае он не подходит вы, вы, похоже, идете против ожидаемого поведения браузера и пользователя, чтобы попытаться манипулировать чем-то, чтобы делать то, что он не делает.
как пользователь, вкладка в поле и возможность использовать стрелки вверх и вниз для изменения значения-это ожидаемое поведение. Например, щелчок по логотипу приведет вас домой или нажатие Cmd / Ctrl + W закроет окно. Если что-то мешает этому, вы в конечном итоге будете отчуждать пользователя, и они потеряют веру в ваш интерфейс.
даже со стандартным type="text"
box, стрелки вверх и вниз не прокручивают страницу, эта функциональность, похоже, идет против всего, что является стандартным.
говоря, что вы не дали контекста для этой проблемы, и это может быть для внутреннего инструмента или частного использования, в этом случае JS похоже, нам пора!
О, я просто смог сделать это с помощью прослушивателя keydown и следующего фильтра:
const invalid = ['e', ',', '.', 'ArrowUp', 'ArrowDown'];
if (invalid.find(e => $event.key === e)) {
$event.preventDefault();
}
в моем случае я также хочу запретить символы:e
,
.