Книга: JavaScript. Подробное руководство, 6-е издание
19.4.4. Дополнительные способы регистрации обработчиков событий
19.4.4. Дополнительные способы регистрации обработчиков событий
Мы уже знаем, что в библиотеке jQuery имеется множество простых методов регистрации обработчиков событий. Внутри каждого из них вызывает один и тот же, более сложный метод bind(),
который связывает обработчик с указанным типом события во всех элементах в объекте jQuery. Прямое использование метода bind()
позволяет использовать дополнительные возможности механизма регистрации, недоступные в простых методах.[55](
В библиотеке jQuery термин «связывание» используется для обозначения регистрации обработчиков событий. Стандарт ECMAScript 5 и многие фреймворки на языке JavaScript определяют в объектах функций метод bind() (раздел 8.7.4) и используют этот термин для обозначения связи функций с объектами, относительно которых они вызываются. Версия метода Function. bind() в библиотеке jQuery является вспомогательной функцией с именем jQuery. ргоху(), которая описывается в разделе 19.7.
В простейшем случае методу bind()
передаются строка с типом события в первом аргументе и функция обработчика события во втором. Простые методы регистрации обработчиков событий используют именно эту форму вызова метода bind().
Вызов $('р').click(f),
например, эквивалентен вызову:
$('р').bind('click',f);
Метод bind()
может также вызываться с тремя аргументами. В этой форме вызова тип события передается в первом аргументе, а функция обработчика - в третьем. Во втором аргументе можно передать любое значение, и библиотека jQuery будет присваивать это значение свойству data
объекта Event
перед вызовом обработчика. Иногда это может пригодиться для передачи обработчику дополнительных данных без использования замыкания.
Кроме того, метод bind()
обладает еще одной дополнительной особенностью. Если в первом аргументе передать список типов событий, разделенных пробелами, то функция обработчика будет зарегистрирована для всех указанных типов событий. Вызов $('a').hover(f)
(раздел 19.4.1), например, эквивалентен вызову:
$('а').bind('mouseenter mouseleave', f);
Еще одной важной особенностью метода bind()
является возможность указать при регистрации пространство (или пространства) имен для обработчиков событий. Это дает возможность определить группу обработчиков событий, что может пригодиться, когда позднее потребуется переключать или удалять обработчики из определенного пространства имен. Поддержка пространств имен для обработчиков особенно удобна для тех, кто пишет библиотеки или модули, использующие библиотеку jQuery. Пространства имен событий подобны селекторам CSS-классов. Чтобы связать обработчик события с определенным пространством имен, добавьте точку и имя пространства имен после типа события:
// Связать f, как обработчик события mouseover в пространстве имен "myMod"
// ко всем элементам <а>
$('а').bind('mouseover.myMod', f);
Имеется даже возможность связать обработчик с несколькими пространствами имен, например:
// Связать f, как обработчик события mouseout в пространствах имен "myMod" и "yourMod"
$('a').bind('mouseout.myMod.yourMod', f);
Последней особенностью метода bind()
является возможность передать ему в первом аргументе объект, отображающий имена событий в функции обработчиков. Возьмем еще раз в качестве примера метод hover().Вызов $("a").hover(f,g)
эквивалентен вызову:
$('а').bind({mouseenter:f, mouseleave:g});
При использовании этой формы метода bind()
именами свойств передаваемого ему объекта могут быть строки со списками типов событий, разделенных запятыми, включающими пространства имен. Если в этом случае передать второй аргумент, его значение будет использоваться как дополнительные данные для всех связанных обработчиков.
Библиотека jQuery имеет еще один метод регистрации обработчиков. Метод опе()
вызывается и действует подобно методу bind(),
за исключением того, что зарегистрированный с его помощью обработчик события автоматически удаляется после первого вызова. То есть, как следует из имени метода, обработчики событий, зарегистрированные с помощью опе(),
никогда не вызываются более одного раза.
Единственное, чем не обладают методы bind()
и опе(),
- это возможность регистрации перехватывающих обработчиков событий, которая поддерживается методом addEventListener()
(раздел 17.2.3). IE (до версии IE9) не поддерживает перехватывающие обработчики, и библиотека jQuery не пытается имитировать эту особенность.
- 19.4.1. Простые методы регистрации обработчиков событий
- 19.4.2. Обработчики событий в библиотеке jQuery
- 19.4.3. Объект Event в библиотеке jQuery
- 19.4.4. Дополнительные способы регистрации обработчиков событий
- 19.4.5. Удаление обработчиков событий
- 19.4.6. Возбуждение событий
- 19.4.7. Реализация собственных событий
- 19.4.8. Динамические события
- 17.3. Вызов обработчиков событий
- 19.4. Обработка событий с помощью библиотеки jQuery
- 19.4.2. Обработчики событий в библиотеке jQuery
- Раздел VII Левиафан в Сети: защита права на тайну частной жизни после событий 2013 г.
- Дополнительные национальные кодовые страницы и порядки сортировки
- Расширение механизма событий
- Глава 8 Дополнительные службы
- Глава 3 Способы монетизации
- Способы «запуска» слухов
- 5. Организация процесса регистрации посетителей
- В Microsoft Word не всегда удобно выделять большие фрагменты текста мышью. Есть ли другие способы?
- 4.6. Дополнительные возможности защиты