keypress в JavaScript — застаріла подія символьної клавіші


Загальний опис

Подія keypress спрацьовує кожного разу, коли користувач натискає клавішу, що генерує символ. Це означає, що подія не буде викликана для клавіш управління, таких як Ctrl, Shift, Esc, або стрілки. Основна мета події — обробка введення символів з клавіатури в реальному часі. Її часто використовують для фільтрації введених даних або реагування на певні символи.

Один із важливих аспектів keypress полягає в тому, що вона викликається до того, як символ з'являється в полі введення. Таким чином, можна запобігти введенню небажаних символів. Основні властивості об'єкта event, які корисні при роботі з keypress, це:

  • event.key: містить символ клавіші, яку натиснули.
  • event.charCode: повертає ASCII код символу, якщо такий є.
  • event.preventDefault(): можна використовувати, щоб запобігти введенню певних символів.

Приклад використання:

document.addEventListener('keypress', function(event) {
  console.log('Натиснута клавіша: ' + event.key);
});

Важливо відзначити, що подія keypress більше не рекомендована до використання для сучасних веб-додатків, оскільки вона застаріла і має обмежену підтримку. Її замінюють події keydown та keyup, які є більш універсальними і підтримують не лише символи, але й спеціальні клавіші.

Якщо потрібно обмежити введення тільки певних символів, наприклад, чисел, можна використовувати keypress для перевірки символу перед тим, як він з'явиться в полі:

document.addEventListener('keypress', function(event) {
  if (!/\d/.test(event.key)) {
    event.preventDefault(); // Блокуємо все, крім цифр
  }
});

Незважаючи на це, keypress все ще може бути корисною для старіших систем або додатків, які не потребують складної обробки клавіатури. Проте сучасним стандартом є використання подій keydown або input для подібних завдань.

автор: Bond

Порада

Якщо вам потрібно обробляти клавіші, що не генерують символи (наприклад, стрілки або функціональні клавіші), краще використовувати keydown, оскільки keypress працює тільки з клавішами, які генерують символи.

автор: Bond
Порада

Застарілі браузери можуть мати різні версії події keypress, тому, якщо потрібно підтримувати старіші платформи, перевіряйте коди символів через event.charCode і порівнюйте з event.keyCode.

автор: Bond
Порада

keypress більше не рекомендується для сучасних веб-додатків, тому варто поступово переходити на події keydown і keyup для універсальної обробки клавіш.

автор: Bond

Синтаксис

element.addEventListener('keypress', function(event) {
  // Ваш код тут
});

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 6 1.3 ≤12.1 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
1 18 6 1

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі подія keypress використовується для того, щоб дозволити користувачу вводити лише літери. Якщо натискається будь-яка інша клавіша (цифра або спеціальний символ), введення блокується. Текст, який користувач вводить у поле, автоматично перетворюється на верхній регістр і відображається під полем у реальному часі.

HTML

<header>
  <h2 class="title">keypress</h2>
  <p class="description">Спрацьовує під час натискання клавіші, що генерує символ, для контролю введених даних.</p>
</header>
<main>
  <div class="result">
    <label for="textInput">Введіть текст (тільки літери):</label>
    <input type="text" id="textInput" placeholder="Введіть тільки літери">
    <p id="outputText">Введений текст з'явиться тут...</p>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

#textInput {
  padding: 8px;
  font-size: 16px;
  width: 100%;
  margin-bottom: 10px;
}

#outputText {
  font-size: 18px;
  font-weight: bold;
  color: #333;
}

JS

const textInput = document.getElementById('textInput');
const outputText = document.getElementById('outputText');

textInput.addEventListener('keypress', function (event) {
  // Дозволяємо вводити тільки літери
  if (!/[a-zA-Z]/.test(event.key)) {
    event.preventDefault();
  }
});

textInput.addEventListener('input', function (event) {
  // Перетворюємо текст на верхній регістр і показуємо в реальному часі
  outputText.textContent = textInput.value.toUpperCase();
});
//# sourceURL=pen.js
автор: Bond

Цей приклад дозволяє користувачу вводити лише цифри в поле введення. При натисканні будь-якого іншого символу, подія keypress спрацьовує і блокує введення цього символу через метод preventDefault().

HTML

<input type="number" id="numberInput" value="10">

JS

const inputField = document.getElementById('numberInput');

inputField.addEventListener('keypress', function(event) {
  if (!/[0-9]/.test(event.key)) {
    event.preventDefault(); // Забороняє введення будь-яких символів, окрім цифр
  }
});
автор: Bond

Цей приклад демонструє, як можна перетворювати введені символи у верхній регістр в реальному часі за допомогою події keypress. Кожен введений символ відображається як велика літера, незалежно від того, у якому регістрі його було введено.

HTML

<input type="text" id="uppercaseInput" value="текст для прикладу" placeholder="Введи щось">

JS

const inputField = document.getElementById('uppercaseInput');

inputField.addEventListener('keypress', function(event) {
  event.preventDefault(); // Забороняємо стандартну поведінку
  inputField.value += event.key.toUpperCase(); // Додаємо символ у верхньому регістрі
});
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід