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

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

Жанры

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

В библиотеке 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.5. Удаление обработчиков событий

После регистрации обработчика событий с помощью метода

bind
(или с помощью простых методов регистрации обработчиков) его можно удалить с помощью метода
unbind,
чтобы предотвратить его вызов при появлении событий в будущем. (Обратите внимание, что метод
unbind
удаляет только обработчики, зарегистрированные методом
bind
и родственными ему методами объекта
jQuery
. Он не удаляет обработчики, зарегистрированные с помощью метода
addEventListener
или
attachEvent,
а также не удаляет обработчики, объявленные в атрибутах элементов, таких как
onclick
и
onmouseover
.) При вызове без аргументов метод
unbind
удалит все обработчики событий (для всех типов событий) из всех выбранных элементов в объекте
jQuery
:

$("*").unbind; // Удалит все обработчики событий из всех элементов!

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

jQuery
:

// Удалить все обработчики событий mouseover и mouseout во всех элементах <а>

$('а').unbind("mouseover mouseout");

Это не самый лучший подход, и его не следует использовать при разработке модулей, потому что пользователь модуля может использовать другие модули, регистрирующие свои собственные обработчики этих же типов событий в тех же элементах. Однако если модуль будет регистрировать обработчики событий с использованием пространств имен, можно будет использовать эту версию вызова метода

unbind
с одним аргументом для удаления только обработчиков события из вашего пространства или пространств имен:

// Удалить все обработчики событий mouseover и mouseout в пространстве имен "myMod"

$('а').unbind("mouseover.myMod mouseout.myMod");

// Удалить только обработчики событий из пространства имен myMod

$( a').unbind(”.myMod”);

// Удалить обработчик события click из пространств имен "ns1" и "ns2"

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

Катализ

Скаландис Ант
Фантастика:
научная фантастика
5.00
рейтинг книги
Катализ

Телохранитель Генсека. Том 2

Алмазный Петр
2. Медведев
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Телохранитель Генсека. Том 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

На цепи

Уваров
1. На цепи
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
На цепи

Старый, но крепкий 4

Крынов Макс
4. Культивация без насилия
Фантастика:
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 4

Эволюционер из трущоб. Том 2

Панарин Антон
2. Эволюционер из трущоб
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 2

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Секретная история вампиров

Тертлдав Гарри Норман
Фантастика:
ужасы и мистика
альтернативная история
5.00
рейтинг книги
Секретная история вампиров

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

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

Наследие Маозари 2

Панежин Евгений
2. Наследие Маозари
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 2

Газлайтер. Том 29

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

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Я до сих пор царь. Книга XXXII

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