Spec-Zone.ru › Web APIs

Событие: метод preventDefault()

Базовый Широко распространённый

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Веб-воркерах.

Метод preventDefault() интерфейса Event сообщает агенту пользователя, что если событие не обрабатывается явно, его действие по умолчанию не должно выполняться.

Событие продолжает распространяться как обычно, если один из его обработчиков событий не вызовет stopPropagation() или stopImmediatePropagation(), которые сразу же прекращают распространение.

Как указано ниже, вызов preventDefault() для неотменяемого события, такого как событие, отправленное через EventTarget.dispatchEvent(), без указания cancelable: true не имеет эффекта.

Если пассивный обработчик вызовет preventDefault(), ничего не произойдёт, и может быть выведено предупреждение в консоль.

Синтаксис

event.preventDefault()

Примеры

Блокирование обработки клика по умолчанию

Переключение флажка — это действие по умолчанию при нажатии на флажок. Этот пример демонстрирует, как предотвратить это:

JavaScript

const checkbox = document.querySelector("#id-checkbox");

checkbox.addEventListener("click", checkboxClick, false);

function checkboxClick(event) {
  const warn = "preventDefault() won't let you check this!\n";
  document.getElementById("output-box").innerText += warn;
  event.preventDefault();
}

HTML

<p>Please click on the checkbox control.</p>

<form>
  <label for="id-checkbox">Checkbox:</label>
  <input type="checkbox" id="id-checkbox" />
</form>

<div id="output-box"></div>

Результат

Прекращение ввода символов в поле редактирования

Следующий пример демонстрирует, как остановить ввод недопустимого текста в поле ввода с помощью preventDefault(). В настоящее время следует обычно использовать встроенную валидацию форм HTML вместо этого.

HTML

Нижеприведенная форма HTML собирает данные пользователя. Так как нас интересуют только нажатия клавиш, мы отключаем autocomplete для предотвращения заполнения поля ввода браузером сохранёнными значениями.

<div class="container">
  <p>Please enter your name using lowercase letters only.</p>

  <form>
    <input type="text" id="my-textbox" autocomplete="off" />
  </form>
</div>

CSS

Мы используем немного CSS для отображения области предупреждения, когда пользователь нажимает недействительную клавишу:

.warning {
  border: 2px solid #f39389;
  border-radius: 2px;
  padding: 10px;
  position: absolute;
  background-color: #fbd8d4;
  color: #3b3c40;
}

JavaScript

И вот код JavaScript, выполняющий эту задачу. Сначала слушаем события keydown:

const myTextbox = document.getElementById("my-textbox");
myTextbox.addEventListener("keydown", checkName, false);

Функция checkName(), которая анализирует нажатую клавишу и определяет, разрешить её или нет:

function checkName(evt) {
  const key = evt.key;
  const lowerCaseAlphabet = "abcdefghijklmnopqrstuvwxyz";
  if (!lowerCaseAlphabet.includes(key)) {
    evt.preventDefault();
    displayWarning(`Please use lowercase letters only.\nKey pressed: ${key}\n`);
  }
}

Функция displayWarning(), которая отображает уведомление о проблеме. Это не самая элегантная функция, но выполняет свою задачу в данном примере:

let warningTimeout;
const warningBox = document.createElement("div");
warningBox.className = "warning";

function displayWarning(msg) {
  warningBox.innerText = msg;

  if (document.body.contains(warningBox)) {
    clearTimeout(warningTimeout);
  } else {
    // insert warningBox after myTextbox
    myTextbox.parentNode.insertBefore(warningBox, myTextbox.nextSibling);
  }

  warningTimeout = setTimeout(() => {
    warningBox.parentNode.removeChild(warningBox);
    warningTimeout = -1;
  }, 2000);
}

Результат

Примечания

Вызов preventDefault() на любой стадии потока события отменяет событие, что означает, что любое действие по умолчанию, обычно выполняемое реализацией в результате события, не произойдёт.

Вы можете использовать Event.cancelable, чтобы проверить, может ли событие быть отменено. Вызов preventDefault() для неотменяемого события не имеет эффекта.

Спецификации

Спецификация
DOM
# ref-for-dom-event-preventdefault③

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
preventDefault 1 12 1 7 1 18 4 10.1 1 1.0 4.4

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API