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

В дополнение к этим простым методам регистрации обработчиков событий существует две специальные формы методов, которые могут иногда пригодиться. Метод

<b>hover()</b>
регистрирует обработчики событий «mouseenter» и «mouseleave». Вызов
<b>hover(f,g)</b>
по своему действию аналогичен двум последовательным вызовам методов
<b>mouseenter(f)</b>
и
<b>mouseleave(g).</b>
Если методу
<b>hover()</b>
передать единственный аргумент, он будет использоваться как обработчик обоих событий.

Другим специальным методом регистрации обработчиков событий является метод

<b>toggle().</b>
Этот метод регистрирует функцию обработчика события «click». Вы можете указать две или более функции обработчиков, и библиотека jQuery будет вызывать их всякий раз, когда будет возникать событие «click». Если, например, вызвать этот метод как
<b>toggle(f,g,h),</b>
функция
<b>f()</b>
будет вызываться для обработки первого события «click»,
<b>g()</b>
- второго,
<b>h()</b>
- третьего и снова
<b>f()</b>
- для обработки четвертого события «click». Будьте внимательны при использовании метода
<b>toggle():</b>
как будет показано в разделе 19.5.1, этот метод может также использоваться для отображения и скрытия (т. е. для переключения видимости) выбранных элементов.

В разделе 19.4.4 мы познакомимся с другими, более обобщенными способами регистрации обработчиков событий и завершим этот раздел описанием еще одного простого и удобного способа регистрации обработчиков.

Напомню, что создавать новые элементы можно с помощью функции

<b>$()</b>
, передавая ей строку с разметкой HTML и объект (во втором аргументе) с атрибутами, которые должны быть установлены во вновь созданном элементе. Второй аргумент может быть любым объектом, который допускается передавать методу
<b>attг().</b>
Но кроме того, если имя какого-либо из свойств совпадает с именем метода регистрации обработчиков событий, перечисленных выше, значение этого свойства будет интерпретироваться как функция-обработчик и зарегистрировано как обработчик данного типа события. Например:

<b>$(&quot;&lt;img/&gt;&quot;, {</b>

<b>  src: image_url,</b>

<b>  alt: image_description,</b>

<b>  className: &quot;translucent_image&quot;,</b>

<b>  click: function() { $(this).css(&quot;opacity&quot;, &quot;50%&quot;): }</b>

<b>});</b>

19.4.2. Обработчики событий в библиотеке jQuery

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

<b>Event</b>
были описаны в главе 17. Библиотека jQuery имитирует стандартный объект
<b>Event</b>
даже в броузерах (таких как IE версии 8 и ниже), не поддерживающих его, и объекты событий в библиотеке jQuery имеют одинаковые наборы полей во всех броузерах. Подробнее об этом рассказывается в разделе 19.4.3.

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

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

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

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

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

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

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

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

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

<b>preventDefault()           isDefaultPrevented()</b>

<b>stopPropagation()          isPropagationStopped()</b>

<b>stopImmediatePropagation() isImmediatePropagationStopped()</b>

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

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

<b>metaKey</b>

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

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