Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Обычно обработчикам событий передается единственный аргумент с объектом события. Но если событие генерируется явно с помощью метода

trigger
(раздел 19.4.6), обработчикам можно передавать массив дополнительных аргументов. В этом случае дополнительные аргументы передаются обработчикам после первого аргумента с объектом события.

Независимо от способа регистрации значение, возвращаемое функцией обработчика событий, всегда имеет большое значение для библиотеки jQuery. Если обработчик вернет false, будут отменены и действия, предусмотренные по умолчанию для этого типа события, и дальнейшее распространение события. То есть возврат значения false равносилен вызову методов

preventDefault
и
stopPropagation
объекта
Event
. Кроме того, когда
обработчик события возвращает значение (отличное от undefined), библиотека jQuery сохраняет это значение в свойстве
result
объекта
Event
, к которому можно обратиться в обработчиках событий, вызываемых вслед за этим обработчиком.

19.4.3. Объект Event в библиотеке jQuery

Библиотека jQuery скрывает различия в реализациях броузеров, определяя собственный объект

Event
. Когда библиотека jQuery вызывает обработчик события, она всегда передает ему в первом аргументе собственный объект
Event
. Объект
Event
в библиотеке jQuery основан на положениях стандартов консорциума W3C, но в нем также реализованы некоторые особенности, ставшие стандартными де-факто. jQuery копирует все следующие поля стандартного объекта
Event
во все свои объекты
Event
(хотя некоторые из них могут иметь значение undefined для определенных типов событий):

В дополнение к этим свойствам объект Event определяет также следующие методы:

preventDefault isDefaultPrevented

stopPropagation isPropagationStopped

stopImmediatePropagation isImmediatePropagationStopped

Большинство из этих свойств и методов было представлено в главе 17 и описывается в четвертой части книги, в справочной статье

Event
. О некоторых из этих полей, обрабатываемых библиотекой jQuery особым образом, чтобы обеспечить им одинаковое поведение во всех броузерах, стоит упомянуть отдельно:

metaKey

Если стандартный объект события не имеет свойства

metaKey
, jQuery присваивает ему значение свойства
ctrlKey
. Значение свойства
metaKey
определяется в MacOS клавишей Command.3

pageX, pageY

Если стандартный объект события не имеет этих свойств, но имеет свойства, определяющие координаты указателя мыши в видимой области в виде свойств

clientX
и
clientY
, jQuery вычислит координаты указателя мыши относительно начала документа и сохранит их в свойствах
pageX
и
pageY
.

target, currentTarget, relatedTarget

Свойство

target
ссылается на элемент документа, в котором возникло событие. Если это свойство в стандартном объекте события ссылается на текстовый узел, jQuery подставит ссылку на вмещающий объект
Element
. Свойство
currentTarget
ссылается на элемент, в котором был зарегистрирован текущий обработчик события. Значение этого свойства всегда должно совпадать со значением
this
.

Если значения свойств

currentTarget
и
target
не совпадают, следовательно, обрабатывается всплывшее событие и может оказаться полезным проверить элемент
target
с помощью метода
is
(раздел 19.1.2):

if ($(event.target).is("a")) return; //
Игнорировать события.

// сгенерированные в ссылках

Свойство

relatedTarget
– ссылка на другой элемент, вовлеченный в события перехода, такие как «mouseover» и «mouseout». Например, для событий «mouseover» свойство
relatedTarget
будет ссылаться на элемент, который покинул указатель мыши при перемещении на элемент
target
. Если стандартный объект события не имеет свойства
relatedTarget
, но имеет свойства
toElement
и
fromElement
, свойство
relatedTarget
получает значение одного из этих свойств в зависимости от типа события.

timeStamp

Время возникновения события в миллисекундах, возвращаемое методом

Date.getTime
. Библиотека jQuery сама устанавливает это свойство, чтобы обойти давнишнюю ошибку в Firefox.

which

Библиотека jQuery нормализует это нестандартное свойство события так, что оно определяет кнопку мыши или клавишу на клавиатуре, нажатие которой вызвало это событие. Для событий клавиатуры, если стандартный объект события не имеет свойства

which
, но имеет свойство
charCode
или
keyCode
, в свойство
which
будет записано значение свойства, которое определено. Для событий мыши, если свойство
which
отсутствует, но имеется свойство
button
, в свойство
which
будет записано значение, основанное на значении свойства
button
. О означает, что никакая кнопка не была нажата. 1 - была нажата левая кнопка, 2 -средняя кнопка и 3 - правая кнопка. (Обратите внимание, что в некоторых броузерах нажатие правой кнопки мыши не генерирует события.)

Кроме того, библиотека jQuery определяет следующие собственные поля в объекте

Event
, которые иногда могут оказаться полезными:

data

Если при регистрации обработчика события были указаны дополнительные данные (раздел 19.4.4), обработчик сможет получить к ним доступ с помощью этого поля.

handler

Ссылка на текущую функцию обработчика события.

result

Возвращаемое значение предыдущего обработчика этого события. Обработчики, не возвращающие ничего, не учитываются.

originalEvent

Ссылка на стандартный объект

Event
, созданный броузером.

19.4.4. Дополнительные способы регистрации обработчиков событий

Мы уже знаем, что в библиотеке jQuery имеется множество простых методов регистрации обработчиков событий. Внутри каждого из них вызывает один и тот же, более сложный метод

bind,
который связывает обработчик с указанным типом события во всех элементах в объекте jQuery. Прямое использование метода
bind
позволяет использовать дополнительные возможности механизма регистрации, недоступные в простых методах. [55] (

55

В библиотеке jQuery термин «связывание» используется для обозначения регистрации обработчиков событий. Стандарт ECMAScript 5 и многие фреймворки на языке JavaScript определяют в объектах функций метод bind (раздел 8.7.4) и используют этот термин для обозначения связи функций с объектами, относительно которых они вызываются. Версия метода Function. bind в библиотеке jQuery является вспомогательной функцией с именем jQuery. ргоху, которая описывается в разделе 19.7.

Поделиться:
Популярные книги

Слезы Эйдена 1

Владимиров Денис
11. Глэрд
Фантастика:
боевая фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Слезы Эйдена 1

Личный аптекарь императора. Том 2

Карелин Сергей Витальевич
2. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Личный аптекарь императора. Том 2

Цикл романов "Целитель". Компиляция. Книги 1-17

Большаков Валерий Петрович
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цикл романов Целитель. Компиляция. Книги 1-17

Гром Раскатного. Том 3

Володин Григорий Григорьевич
3. Штормовой Предел
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Гром Раскатного. Том 3

Бастард Императора. Том 10

Орлов Андрей Юрьевич
10. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 10

Последний Паладин. Том 7

Саваровский Роман
7. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 7

Ученик. Книга вторая

Первухин Андрей Евгеньевич
2. Ученик
Фантастика:
фэнтези
5.40
рейтинг книги
Ученик. Книга вторая

Князь Андер Арес 5

Грехов Тимофей
5. Андер Арес
Фантастика:
историческое фэнтези
фэнтези
героическая фантастика
5.00
рейтинг книги
Князь Андер Арес 5

Последний Паладин. Том 12

Саваровский Роман
12. Путь Паладина
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Последний Паладин. Том 12

Гримуар темного лорда II

Грехов Тимофей
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда II

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Бояръ-Аниме. Газлайтер. Том 30

Володин Григорий Григорьевич
30. История Телепата
Фантастика:
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 30

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я граф. Книга XII

Наследник

Майерс Александр
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник