- Операторы
- Управляющие инструкции
- JS Объекты
- браузер BOM
- HTML DOM
- События
- Объект Event
- Mouse
- Keyboard
- Frame/Object
- Form
- Drag & Drop
- Media
- CSS Animation
- CSS transitions
- Touch
- HTML Объекты
- Промисы, async/await
- Сетевые запросы
- Бинарные данные и файлы
- Модули
- Классы
- Разное
События формы и элементов управления
- focus
- Событие происходит, когда элемент получает фокус. Данное событие не всплывает.
- blur
- Событие происходит, когда объект теряет фокус. Данное событие не всплывает.
- focusin
- Событие происходит, когда элемент получает фокус. Событие
focusinподобно событиюfocus, но отличается от него тем, что оно всплывает. - focusout
- Событие происходит, когда элемент собирается потерять фокус. Событие
focusoutподобно событиюblur, но отличается от него тем, что оно всплывает. - change
- Событие происходит при изменении значения элемента, но уже после того как элемент потерял фокус.
- input
- Событие происходит после того как изменяется значение элемента
inputили элементаtextarea. - invalid
- Событие происходит, когда элемент
input, данные которого необходимо отправить вместе с другими данными формы на сервер, содержит недопустимые данные. - reset
- Событие происходит перед очисткой формы, которая осуществляется элементом
inputсtype="reset". - search
- Событие возникает после того как пользователь нажимает на клавишу Enter или нажимает кнопку "
x" (отмена) в элементеinputсtype="search". - select
- Событие происходит после того как Вы выбрали некоторый текст в элементе.
- submit
- Событие происходит перед отправкой формы на сервер.
События focus/blur
Событие focus вызывается тогда, когда пользователь фокусируется на элементе, а blur – когда фокус исчезает, например посетитель кликает на другом месте экрана.
Поддерживаемые HTML-теги
По умолчанию не все элементы поддерживают фокусировку.
Перечень элементов немного рознится от браузера к браузеру, например, список для IE описан в MSDN, одно лишь верно всегда – заведомо поддерживают focus/blur те элементы, c которыми посетитель может взаимодействовать: <button>, <input>, <select>, <a> и т.д.
С другой стороны, на элементах для форматирования, таких как <div>, <span>, <table> – по умолчанию сфокусироваться нельзя. Впрочем, существует способ включить фокусировку и для них.
В HTML есть атрибут tabindex.
Его основной смысл – это указать номер элемента при переборе клавишей Tab.
То есть, если есть два элемента, первый имеет tabindex="1", а второй tabindex="2", то нажатие Tab при фокусе на первом элементе – переведёт его на второй.
Исключением являются специальные значения:
tabindex="0"делает элемент всегда последним.tabindex="-1"означает, что клавиша Tab будет элемент игнорировать.
Любой элемент поддерживает фокусировку, если у него есть tabindex.
В примере ниже есть список элементов. Кликните на любой из них и нажмите «tab».
<style>
li { cursor: pointer; }
:focus { outline: 1px dashed green; }
</style>
<p>Кликните на первый элемент списка и нажмите Tab.
Внимание! Дальнейшие нажатия Tab могут вывести за границы iframe'а с примером.</p>
<ul>
<li tabindex="1">Один</li>
<li tabindex="0">Ноль</li>
<li tabindex="2">Два</li>
<li tabindex="-1">Минус один</li>
</ul>
Порядок перемещения по клавише «Tab» в примере выше должен быть таким: 1 - 2 - 0 (ноль всегда последний).
Обычно <li> не поддерживает фокусировку, но здесь есть tabindex.
Примеры
<p>Когда вы в поле ввода, запускается функция, которая устанавливает цвет фона в желтый цвет.
Когда вы покидаете поле ввода, запускается функция, которая устанавливает цвет фона в красный цвет.</p>
Введите ваше имя: <input type="text" id="myInput" onfocus="focusFunction()" onblur="blurFunction()">
<script>
function focusFunction()
{ document.getElementById("myInput").style.background = "yellow"; }
function blurFunction()
{ document.getElementById("myInput").style.background = "red"; }
</script>
Методы focus()/blur()
Методы focus()/blur() переводят/уводят фокус с элемента.
Синтаксис
element.focus() // Установить фокус на элементе element.blur() // Убрать фокус с элемента
Пример
<style>
:focus {border: 1px solid red;}
</style>
<p><a id="a1" href="help.html">Справка</a></p>
<p> Элемент input: <input id="a2" type="text"></p>
Элемент textarea: <textarea id="a3"></textarea>
<p>Установить фокус:
<button onclick="F(1)"> на ссылку </button>
<button onclick="F(2)"> в input </button>
<button onclick="F(3)"> в textarea </button></p>
<button onclick="F(0)"> Убрать фокус </button>
<script>
function F(n) {
if (n==0)
{ document.getElementById('a1').blur();
document.getElementById('a2').blur();
document.getElementById('a3').blur(); }
else document.getElementById('a'+n).focus();
}
</script>
События focusin/focusout
События focusin/focusout – то же самое, что и focus/blur, только они всплывают.
Поэтому их можно использовать, когда Вам необходимо выяснить, кто теряет фокус: элемент или его ребёнок?
Совместимость с браузерами
![]() | ![]() | ![]() | ![]() | ![]() |
| Да | Да | 52,0 | Да | Да |
Пример
<p>Когда вы в поле ввода, запускается функция, которая устанавливает цвет фона в желтый цвет.
Когда вы покидаете поле ввода, запускается функция, которая устанавливает цвет фона в красный цвет.</p>
Введите ваше имя: <input type="text" id="myInput" onfocusin="focusFunction()" onfocusout="blurFunction()">
<script>
function focusFunction()
{ document.getElementById("myInput").style.background = "yellow"; }
function blurFunction()
{ document.getElementById("myInput").style.background = "red"; }
</script>
change
Событие change происходит при изменении значения элемента, но уже после того как элемент потерял фокус. Кроме события change в JavaScript есть также похожее событие input, которое отличается от события change тем, что происходит сразу же после изменения значения элемента. Событие сhange в отличие от события input также работает с элементами keygen и select. Для радиокнопок (radiobuttons) и флажков (checkboxes) событие change происходит при изменении состояния этих элементов.
Поддерживаемые HTML-теги
<input type="checkbox">, <input type="color">, <input type="date">, <input type="datetime">, <input type="email">, <input type="file">, <input type="month">, <input type="number">, <input type="password">, <input type="radio">, <input type="range">, <input type="search">, <input type="tel">, <input type="text">, <input type="time">, <input type="url">, <input type="week">, <keygen>, <select>, <textarea>Пример
<p>Выберите новый автомобиль из списка.</p>
<select id="mySelect" onchange="myFunction()">
<option value="Audi">Audi</option>
<option value="BMW">BMW</option>
<option value="Mercedes">Mercedes</option>
<option value="Volvo">Volvo</option>
</select>
<p>Когда вы выбираете новый автомобиль, срабатывает функция,
которая выводит название выбранного автомобиля.</p>
<p id="demo"></p>
<script>
function myFunction() {
var x = document.getElementById("mySelect").value;
document.getElementById("demo").innerHTML = "Вы выбрали: " + x;
}
</script>
input
Событие input происходит после того как изменяется значение элемента input или элемента textarea.
Это событие похоже на событие change. Разница заключается в том, что событие input происходит сразу же после того, как значение элемента изменилось, в то время как change происходит, когда элемент теряет фокус, после того, как содержание было изменено.
Поддерживаемые HTML-теги
<input type="color">, <input type="date">, <input type="datetime">, <input type="email">, <input type="month">, <input type="number">, <input type="password">, <input type="range">, <input type="search">, <input type="tel">, <input type="text">, <input type="time">, <input type="url">, <input type="week">, <textarea>Совместимость с браузерами
![]() | ![]() | ![]() | ![]() | ![]() |
| Да | 9,0 | 4,0 | Да | 5,0 |
В современных браузерах input – самое главное событие для работы с элементом формы. Именно его, а не keydown/keypress следует использовать.
Если бы ещё не проблемы со старыми IE…
В IE10- есть событие propertychange, которое происходит при любом изменении свойства. Оно позволяет отлавливать изменение тут же. Оно нестандартное, и его основная область использования – исправление недочётов обработки событий в старых IE.
Что же касается IE9 – там поддерживаются и input и onpropertychange, но они оба не работают при удалении символов.
Примеры
<p>Напишите что-нибудь в текстовом поле, чтобы вызвать функцию.</p>
<input type="text" id="myInput" oninput="myFunction()">
<p id="demo"></p>
<script>
function myFunction() {
var x = document.getElementById("myInput").value;
document.getElementById("demo").innerHTML = "Вы пишите: " + x;
}
</script>
Кроссбраузерное решение
<p>Напишите что-нибудь в текстовом поле.</p>
<input type="text" id="myInput">
<p id="demo"></p>
<script>
var v = document.getElementById("myInput");
function myFunction()
{ document.getElementById("demo").innerHTML = "Вы пишите: " + v.value; }
v.onkeyup = v.oninput = myFunction;
v.onpropertychange = function()
{ if (event.propertyName == "value") myFunction(); }
v.oncut = function()
{ setTimeout(myFunction, 0); } // на момент oncut значение еще старое
</script>
invalid
Событие invalid происходит, когда элемент input, данные которого необходимо отправить вместе с другими данными формы на сервер, содержит недопустимые данные.
Поддерживаемые HTML-теги
<input>Совместимость с браузерами
![]() | ![]() | ![]() | ![]() | ![]() |
| Да | 10,0 | Да | Нет | Да |
Пример
<form action = "handler.php" method = "get">
Нажмите отправить: <input type = "text" oninvalid = "testFunction()" name = "info" required>
<input type = "submit" value = "Отправить">
</form>
<script>
function testFunction()
{ Alert("Вы не заполнили обязательное поле!"); }
</script>
reset
Событие reset происходит перед очисткой формы, которая осуществляется элементом input с type="reset".
Поддерживаемые HTML-теги
<input>, <keygen>Пример
<p>Напишите что-нибудь в текстовом поле и нажмите кнопку «Сброс».</p>
<form action = "handler.php" method = "get" id="form">
<input type="text" name="something">
<input type="reset">
</form>
<script>
document.getElementById("form").onreset=myFunction;
function myFunction(event)
{ if (!confirm("Вы уверены?")) event.preventDefault(); }
</script>
search
Событие search возникает после того как пользователь нажимает на клавишу Enter или нажимает кнопку "x" (отмена) в элементе input с type="search".
Поддерживаемые HTML-теги
<input type="search">Совместимость с браузерами
![]() | ![]() | ![]() | ![]() | ![]() |
| Да | Нет | Нет | Да | 15,0 |
Пример
<p>Напишите что-нибудь в поле поиска и нажмите «ENTER».</p>
<input type="search" id="myInput" onsearch="myFunction()">
<p><b>Примечание</b>. Событие onsearch не поддерживается в Internet Explorer, Firefox и Opera 12,0-.</p>
<p id="demo"></p>
<script>
function myFunction() {
var x = document.getElementById("myInput");
document.getElementById("demo").innerHTML = "Вы ищете: " + x.value;
}
</script>
select
Событие select происходит после того как Вы выбрали некоторый текст в элементе. Событие select в основном используется для элемента input с type="text" или textarea.
Поддерживаемые HTML-теги
<input type="file">, <input type="password">, <input type="text">, <keygen>, <textarea>Пример
<input type="text" value="Выделите здесь текст" onselect="alert('Вы выделили текст')" />
submit
Событие submit происходит перед отправкой формы на сервер.
Поддерживаемые HTML-теги
<input>, <keygen>Пример
<form id="myForm" action="handler.php">
Введите имя: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
<script>
document.getElementById("myForm").onsubmit = myFunction;
function myFunction(event)
{ if (!confirm("Вы уверены?")) event.preventDefault(); }
</script>




