Практически все JavaScript-приложения выполняют те или иные действия, откликаясь на различные события.
Событие - это сигнал от браузера о том, что что-то произошло.
Есть множество самых различных событий.
События мыши:
События на элементах управления:
Клавиатурные события:
События документа:
События CSS:
Через атрибут HTML-тега
<input value="Нажми Меня" onclick="alert('Спасибо!');" type="button"/>
Можно назначить и функцию.
<script type="text/javascript">
function count_rabbits() {
for(var i=1; i<=3; i++) {
// оператор + соединяет строки
alert("Из шляпы достали " + i + " кролика!")
}
}
</script>
<input type="button" onclick="count_rabbits()" value="Считать кролей!"/>
Через свойство объекта
<input id="myElement" type="button" value="Нажми меня"/>
<script>
document.getElementById('myElement').onclick = function() {
alert('Спасибо')
}
<script>
function doSomething() {
alert('Спасибо')
}
document.getElementById('button').onclick = doSomething
// Обратите внимание - свойству присваивается именно
// сама функция-обработчик doSomething, а не doSomething():
можно и не создавать анонимную функцию, а использовать любую уже готовую:
<button onclick="alert(this.innerHTML)">Нажми меня</button>
input.onclick = function() { alert(1) }
// ...
input.onclick = function() { alert(2) } // заменит предыдущий
element.addEventListener(event, handler[, phase]);
event
Имя события, например click
handler
Ссылка на функцию, которую надо поставить обработчиком.
// передать те же аргументы, что были у addEventListener
element.removeEventListener(event, handler[, phase]);
<input id="elem" type="button" value="Нажми меня"/>
<script>
function handler1() {
alert('Спасибо!');
};
function handler2() {
alert('Спасибо ещё раз!');
}
elem.onclick = function() { alert("Привет"); };
elem.addEventListener("click", handler1); // Спасибо!
elem.addEventListener("click", handler2); // Спасибо ещё раз!
</script>
function doSomething(event) {
// event - будет содержать объект события
}
element.onclick = doSomething;
function showModal(event) {
// event - будет содержать объект события
event.preventDefault(); //предотвращение дейсвтия по умолчанию
// Код показа модального окна
}
var modalTrigger = document.querySelector("a[data-modal]");
modalTrigger.onclick = showModal;
как предотвратить действие браузера по умолчани
Простые события
mousedown
Кнопка мыши нажата над элементом.
mouseup
Кнопка мыши отпущена над элементом.
mouseover
Мышь появилась над элементом.
mouseout
Мышь ушла с элемента.
mousemove
Каждое движение мыши над элементом генерирует это событие.
Комплексные события
click
Вызывается при клике мышью, то есть при mousedown, а затем mouseup на одном элементе
contextmenu
Вызывается при клике правой кнопкой мыши на элементе.
dblclick
Вызывается при двойном клике по элементу.
в окне: clientX/Y
<input onmousemove="this.value = event.clientX+':'+event.clientY">
Относительно документа: pageX/Y
<input onmousemove="this.value = event.pageX+':'+event.pageY">
Событие mouseover
происходит, когда мышь появляется над элементом, а mouseout
– когда уходит из него.
При переходе на потомка срабатывает mouseout на родителе.
mouseenter/mouseleave
mouseover/mouseout
wheel
deltaY
– количество прокрученных пикселей по горизонтали и вертикали. Существуют также свойства deltaX
и deltaZ
для других направлений прокрутки.window.onscroll = function() {
var scrolled = window.pageYOffset;
document.getElementById('showScroll').innerHTML = scrolled + 'px';
}
document.getElementById("myDIV").addEventListener("wheel", myFunction);
function myFunction(event) {
this.style.fontSize = event.deltaY + "px";
}
keydown/keyup
<input onkeydown="this.nextElementSibling.innerHTML = event.keyCode"><b></b>
keypress
<input onkeypress="this.nextElementSibling.innerHTML = event.charCode"><b></b>
window.onbeforeunload = function() {
return "Данные не сохранены. Точно перейти?";
};
window.onload = function() {
//.....
$slider.init();
};
document.addEventListener("DOMContentLoaded", ready);
<script>
var form = document.forms[0];
var select = form.elements.genre;
for (var i = 0; i < select.options.length; i++) {
var option = select.options[i];
if(option.selected) {
alert( option.value );
}
}
</script>
document.forms
Форму можно получить как document.forms[name/index].
form.elements
Элементы в форме: form.elements[name/index]. Каждый элемент имеет ссылку на форму в свойстве form. Свойство elements также есть у <fieldset>.
Значение элементов читается/ставится через value или checked.
<form name="form">
<select name="genre" multiple>
<option value="blues" selected>Мягкий блюз</option>
<option value="rock" selected>Жёсткий рок</option>
<option value="classic">Классика</option>
</select>
</form>
навигация по формам
Событие focus вызывается тогда, когда пользователь фокусируется на элементе, а blur – когда фокус исчезает, например посетитель кликает на другом месте экрана.
input.onblur = function() {
if (isNaN(this.value)) { // введено не число
// показать ошибку
this.className = "error";
error.innerHTML = 'Вы ввели не число. Исправьте, пожалуйста.'
}
};
Метод focus()
age.onblur = function() {
if (isNaN(this.value)) { // введено не число
// показать ошибку
this.classList.add("error");
//... и вернуть фокус обратно
age.focus();
} else {
this.classList.remove("error");
}
};
Событие | Описание | Особенности |
---|---|---|
change |
Изменение значения любого элемента формы. Для текстовых элементов срабатывает при потере фокуса. | В IE8- на чекбоксах ждет потери фокуса, поэтому для мгновенной реакции ставят также onclick -обработчик или onpropertychange . |
input |
Событие срабатывает только на текстовых элементах. Оно не ждет потери фокуса, в отличие от change . |
В IE8- не поддерживается, в IE9 не работает при удалении символов. |
propertychange |
Только для IE10-. Универсальное событие для отслеживания изменения свойств элементов. Имя изменённого свойства содержится в event.propertyName . Используют для мгновенной реакции на изменение значения в старых IE. |
В IE9 не срабатывает при удалении символов. |
cut/copy/paste |
Срабатывают при вставке/копировании/удалении текста. Если в их обработчиках отменить действие браузера, то вставки/копирования/удаления не произойдёт. | Вставляемое значение получить нельзя: на момент срабатывания события в элементе всё ещё старое значение, а новое недоступно. |
<input type="text" onchange="alert(this.value)">
<input type="button" value="Кнопка">
<input type="text"> oninput: <span id="result"></span>
<script>
var input = document.body.children[0];
input.oninput = function() {
document.getElementById('result').innerHTML = input.value;
};
</script>