jQuery.delegate

программирование JavaScript jQuery

$('body').delegate('.test', 'click', function() {
console.log(1);
$(document).bind('click.test', function() {
console.log(2);
$(document).unbind('click.test');
});
});​

Почему в консоль выводит это:
1
2

Я не вижу логики.
Пример: http://jsfiddle.net/Rgb7n/

Примечание:
Почему мне это кажется не логично?
Потому что когда я вешаю обработчик на body, я ожидаю, что действие произойдет ПОСЛЕ клика. Так я добавляю событие ПОСЛЕ клика, я и ожидаю, что добавится оно, соответственно, после. Здесь меня запутал delegate, конечно.

Вот такая реализация, например, работает логично http://jsfiddle.net/Rgb7n/2/

А минусовать вопрос считаю неразумным, тема, мне кажется, интересная :)
Ответы:
а что нелогично то? Вы кликнули на .test, событие начало всплывать и дошло до 'body' где запустился обработчик который вывел 1 и навесил обработчик на document, событие продолжило всплывать и попало в document где и сработал только что навешенный обработчик который вывел 2 и удалился.
добавьте в конец первого(того который delegate) return false; и вы получите в консоле только 1. а потом кликнув по любому пустому месту на странице получите 2 один раз.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.