Пространство имен

Как вы уже узнали, когда мы хотим создать свой обработчик событий, мы пишем вот такой код:

// создаем свой обработчик
$("p").on("click", function() {
    // что-то делаем
    alert("Click!");
});

Когда нам надо удалить обработчики, используем следующий код:

// удаляем все обработчики
$("p").off();

// удаляем все обработчики click
$("p").off("click");

Но, как всегда, есть ситуации, когда нам необходимо задействовать или отключить не все обработчики (как пример, надо отключить обработку какого-то контрола определённым плагином). В этом случае нам на помощь приходят пространства имён, и использовать их достаточно легко.

При создании обработчика события добавляем namespace через точку:

// создаём обработчик
$("p").on("click.namespace", function(event){
    // что-то делаем
    alert("Click: " + event.namespace + "!");
});

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

Когда вызываем событие из другого пространства имён, наш обработчик не будет вызван:

Когда вызываем все-все обработчики событий:

Когда вызываем все обработчики без пространства имён:

До версии 1.9 для это цели следовало использовать имя события с восклицательным знаком click!, а после — вот такой workaround завязанный на недостатке одного регулярного выражения.

И последний случай — удаление обработчика событий привязанного к нашему «namespace»:

Хот можно одним махом удалить все обработчики из определённого пространства имён:

Ещё полезный пример хитрого обработчика — он может ловить и обрабатывать данные:

Инициируем обработку события, в качестве данных передаём массив аргументов:

Так же хотел обратить внимание на поддержку нескольких пространств имён:

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

Last updated