Объект события (event object) в jQuery представляет
собой централизованный механизм для работы с событиями в DOM. Он
инкапсулирует информацию о событии, которое произошло, и предоставляет
удобные методы для управления его поведением. Основной особенностью
является то, что объект события автоматически передается в
функцию-обработчик при срабатывании события.
В jQuery объект события создается автоматически при использовании
метода .on(), .bind(),
.delegate() или .live(). Передача его в
обработчик осуществляется через первый параметр функции:
$('#button').on('click', function(event) {
console.log(event); // объект события
});
Здесь event содержит всю информацию о клике: тип
события, цель, состояние клавиш, координаты мыши и т.д.
type — тип события (click,
keydown, submit и др.).
console.log(event.type); // "click"target — элемент, на котором произошло событие.
console.log(event.target); // <button id="button">Click</button>currentTarget — элемент, к которому привязан
обработчик. Отличается от target, если событие
всплывает.
console.log(event.currentTarget);relatedTarget — другой элемент, связанный с
событием, используется для mouseover и
mouseout.
pageX, pageY — координаты курсора относительно страницы при срабатывании события.
which — код клавиши или кнопки мыши. Для клавиш
клавиатуры which соответствует коду нажатой клавиши, для
мыши — 1 (левая), 2 (средняя), 3 (правая).
metaKey, ctrlKey, altKey, shiftKey — логические значения состояния клавиш-модификаторов.
preventDefault() — предотвращает выполнение действия по умолчанию для события.
$('#link').on('click', function(event) {
event.preventDefault(); // ссылка не будет переходить по адресу
});stopPropagation() — останавливает всплытие события к родительским элементам.
$('#child').on('click', function(event) {
event.stopPropagation(); // событие не достигнет родителя
});stopImmediatePropagation() — кроме остановки всплытия, предотвращает вызов других обработчиков того же события на текущем элементе.
isDefaultPrevented(), isPropagationStopped(), isImmediatePropagationStopped() — возвращают булевы значения состояния соответствующих методов.
jQuery позволяет передавать дополнительные данные в обработчик через
параметр data при привязке события:
$('#button').on('click', {user: 'admin'}, function(event) {
console.log(event.data.user); // "admin"
});
Это удобно для передачи контекста или параметров без глобальных переменных.
jQuery автоматически нормализует объект события, чтобы обеспечить одинаковое поведение в разных браузерах. Например:
event.target в IE иногда возвращал window
или document; jQuery корректирует это до элемента DOM.event.which нормализует коды клавиш для клавиатуры и
мыши.pageX и
pageY, даже если браузер их не предоставляет напрямую.Объект события активно используется для управления всплытием и делегированием:
$('#list').on('click', 'li', function(event) {
console.log('Clicked item:', event.target);
});
Здесь обработчик назначается на #list, но через
event.target можно узнать, какой <li>
был нажат.
$('a.external').on('click', function(event) {
event.preventDefault();
console.log('Внешняя ссылка была нажата:', event.target.href);
});
$('#modal').on('click', function(event) {
event.stopPropagation(); // клик внутри модального окна не закрывает его
});
$(document).on('keydown', function(event) {
if (event.ctrlKey && event.which === 83) { // Ctrl+S
event.preventDefault();
console.log('Сохранение через Ctrl+S предотвращено');
}
});
Объект события jQuery обеспечивает единый, кроссбраузерный способ работы с событиями, предоставляя полный контроль над их поведением и дополнительными данными. Его понимание является ключевым при создании сложных интерактивных интерфейсов.