Javascript preventdefault in function

.prevent Default ( )

На каждое действие пользователя на сайте, браузер создаёт события. Это наш главный способ в коде понимать, что происходит на странице. Событие — это объект, который имеет набор свойств и методов для взаимодействия с ним.

prevent Default ( ) — метод события. Этот метод отменяет поведение браузера по умолчанию, которое происходит при обработке события.

Например, при нажатии на ссылку, мы переходим по адресу этой ссылки. Вызов prevent Default ( ) отменит это поведение.

Как пишется

Скопировать ссылку «Как пишется» Скопировано

Отменим переход по ссылке для всех тегов на странице. Для этого получим все ссылки с помощью query Selector ( ) , подпишемся на событие ‘click’ , и вызовем prevent Default ( ) :

 const links = document.querySelector('a') links.addEventListener('click', (event) =>  // отменяем действие по умолчанию. Перехода по ссылке не будет event.preventDefault()>) const links = document.querySelector('a') links.addEventListener('click', (event) =>  // отменяем действие по умолчанию. Перехода по ссылке не будет event.preventDefault() >)      

Пример

Скопировать ссылку «Пример» Скопировано

Как понять

Скопировать ссылку «Как понять» Скопировано

Давайте разберём код из интерактивного примера:

  const runTimer = (inputElement) =>  setTimetout(() =>  inputElement.focus() >, 5000) > const inputElement = document.querySelector('.input') inputElement.addEventListener('mousedown', (event) =>  event.preventDefault() runTimer(inputElement) >); const runTimer = (inputElement) =>  setTimetout(() =>  inputElement.focus() >, 5000) > const inputElement = document.querySelector('.input') inputElement.addEventListener('mousedown', (event) =>  event.preventDefault() runTimer(inputElement) >);      

Когда пользователь нажимает на инпут элемент, генерируется цепочка событий в следующем порядке: mousedown -> mouseup -> click .

Когда происходит событие mousedown , браузер устанавливает фокус на поле ввода. Вызовом event . prevent Default ( ) мы отменили это поведение. Затем мы запустили таймер, который установит фокус на инпут через 5 секунд с помощью вызова метода focus ( ) .

На практике

Скопировать ссылку «На практике» Скопировано

Георгий Милевский советует

Скопировать ссылку «Георгий Милевский советует» Скопировано

🛠 Часто возникает необходимость отправить данные из формы на сервер без перезагрузки страницы. Поведение по умолчанию формы — это отправка запроса на сервер и перезагрузка страницы. И тут нам на помощь приходит метод prevent Default ( ) , который отменит действия связанные с отправкой формы:

       form class="discount-form"> label for="promocode">Промокодlabel> input id="promocode" type="text" name="promocode" placeholder="WIN-1234" required> button type="submit">Применитьbutton> form>      
 const form = document.querySelector('.discount-form')form.addEventListener('submit', (event) =>  event.preventDefault() // код по подготовке данных // и их отправка на сервер>) const form = document.querySelector('.discount-form') form.addEventListener('submit', (event) =>  event.preventDefault() // код по подготовке данных // и их отправка на сервер >)      

Подробнее этот подход разбирается в статье «Работа с формами».

Источник

Event: preventDefault() method

The preventDefault() method of the Event interface tells the user agent that if the event does not get explicitly handled, its default action should not be taken as it normally would be.

The event continues to propagate as usual, unless one of its event listeners calls stopPropagation() or stopImmediatePropagation() , either of which terminates propagation at once.

As noted below, calling preventDefault() for a non-cancelable event, such as one dispatched via EventTarget.dispatchEvent() , without specifying cancelable: true has no effect.

Syntax

Examples

Blocking default click handling

Toggling a checkbox is the default action of clicking on a checkbox. This example demonstrates how to prevent that from happening:

JavaScript

const checkbox = document.querySelector("#id-checkbox"); checkbox.addEventListener("click", checkboxClick, false); function checkboxClick(event)  let warn = "preventDefault() won't let you check this!
"
; document.getElementById("output-box").innerHTML += 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> 

Result

Stopping keystrokes from reaching an edit field

The following example demonstrates how invalid text input can be stopped from reaching the input field with preventDefault() . Nowadays, you should usually use native HTML form validation instead.

HTML

The HTML form below captures user input. Since we’re only interested in keystrokes, we’re disabling autocomplete to prevent the browser from filling in the input field with cached values.

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

We use a little bit of CSS for the warning box we’ll draw when the user presses an invalid key:

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

JavaScript

And here’s the JavaScript code that does the job. First, listen for keydown events:

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

The checkName() function, which looks at the pressed key and decides whether to allow it:

function checkName(evt)  const charCode = evt.charCode; if (charCode !== 0)  if (charCode  97 || charCode > 122)  evt.preventDefault(); displayWarning( "Please use lowercase letters only.\n" + `charCode: $charCode>\n`, ); > > > 

The displayWarning() function presents a notification of a problem. It’s not an elegant function but does the job for the purposes of this example:

let warningTimeout; const warningBox = document.createElement("div"); warningBox.className = "warning"; function displayWarning(msg)  warningBox.innerHTML = 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); > 

Result

Notes

Calling preventDefault() during any stage of event flow cancels the event, meaning that any default action normally taken by the implementation as a result of the event will not occur.

You can use Event.cancelable to check if the event is cancelable. Calling preventDefault() for a non-cancelable event has no effect.

Specifications

Browser compatibility

BCD tables only load in the browser

Found a content problem with this page?

This page was last modified on Jul 7, 2023 by MDN contributors.

Your blueprint for a better internet.

Источник

Зачем нужен метод preventDefault

Возможно, вам уже когда-то встречалась в коде такая строка — evt.preventDefault() . Например, в тренажёрах по JavaScript. Давайте подробно разберём, зачем она нужна.

При разработке таких типичных элементов интерфейса, как форма или попап, часто нужно изменить поведение браузера по умолчанию. Допустим, при клике по ссылке мы хотим, чтобы открывался попап, но вместо этого браузер будет автоматически переходить по адресу, указанному в атрибуте href . Или вот другая проблема — мы хотим перед отправкой формы проверять корректность введённых данных, но после нажатия на кнопку submit форма каждый раз будет отправляться на сервер, даже если там куча ошибок. Такое поведение браузера нам не подходит, поэтому мы научимся его переопределять.

Объект события и метод preventDefault

Событие — это какое-то действие, произошедшее на странице. Например, клик, нажатие кнопки, движение мыши, отправка формы и так далее. Когда срабатывает событие, браузер создаёт объект события Event. Этот объект содержит всю информацию о событии. У него есть свои свойства и методы, с помощью которых можно эту информацию получить и использовать. Один из методов как раз позволяет отменить действие браузера по умолчанию — preventDefault() .

Event можно передать в функцию-обработчик события и в ней указать инструкции, которые должны быть выполнены, когда оно сработает. При передаче объекта события в обработчик обычно используется сокращённое написание — evt .

Пример: когда ссылка — не ссылка

Ранее мы уже говорили о попапе, который должен появляться при клике на ссылку — давайте разберём этот кейс на практике. Так будет выглядеть разметка в упрощённом виде:

Мы хотим при клике на ссылку click-button добавлять элементу с классом content класс show . Он сделает попап видимым, поменяв значение свойства display с none на block . Напишем логику добавления этого класса с помощью JavaScript:

// Находим на странице кнопку и попап const button = document.querySelector('.click-button'); const popup = document.querySelector('.content'); // Навешиваем на кнопку обработчик клика button.onclick = function (evt) < // Отменяем переход по ссылке evt.preventDefault(); // Добавляем попапу класс show, делая его видимым popup.classList.add('show'); >; 

Если мы уберём строку evt.preventDefault() , вместо попапа откроется отдельная страница pop-up.html , адрес которой прописан в атрибуте href у ссылки. Такая страница нужна, потому что мы хотим, чтобы вся функциональность сайта была доступна, если скрипт по какой-то причине не будет загружен. Именно поэтому мы изначально реализовали кнопку с помощью тега a , а не button . Но у нас с JavaScript всё в порядке, поэтому вместо отдельной страницы мы открыли попап, отменив действие браузера по умолчанию.

Пример: проверка формы перед отправкой

Разберём следующий кейс — отправку формы при нажатии на кнопку submit . Допустим, мы хотим перед отправкой проверять введённые данные, потому что в поле ввода обязательно должно быть значение ‘Кекс’ и никакое другое. Разметка формы:

При нажатии на кнопку «Готово» сработает событие отправки формы submit , и форма отправится вне зависимости от корректности введённого значения, поэтому мы должны перехватить отправку.

// Находим на странице форму и инпут const form = document.querySelector('.form'); const name = document.querySelector('.name'); // Навешиваем на форму обработчик отправки form.onsubmit = function(evt) < // Проверяем введённое значение на соответствие if (name.value !== 'Кекс') < // Если значение не подходит, отменяем автоматическую отправку формы evt.preventDefault(); // И выводим предупреждение в консоль console.log('Вы не Кекс!'); >>; 

Здесь мы не дали отправить форму при неверно введённом значении. Но если всё в порядке, условие не выполнится, и форма будет отправлена как обычно.

Неотменяемые события

Не для всех событий можно отменить действие по умолчанию. Например, событие прокручивания страницы scroll проигнорирует попытки отменить его. Чтобы узнать, можно отменить действие по умолчанию или нет, нужно обратиться к свойству cancelable объекта Event . Оно будет равно true , если событие можно отменить, и false — в обратном случае.

document.onscroll = function(evt) < // В консоль выведется false console.log(evt.cancelable); // Отмена не сработает evt.preventDefault(); >; 

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

Больше практики в JavaScript

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Источник

Читайте также:  font-size
Оцените статью