как действительно работает метод обещания jquery?
Я действительно не понимаю, что delegate
и promise
есть.
по документам -
-
delegate
свяжет селектор и событие с каким-то упаковочным контейнером, который можно будет использовать позже для текущих и будущих элементов. -
promise()
будет переназначить вещи обратно, когда он был впервые ограничен, если все загруженные матчи. Может быть, я действительно не понимаю этот метод обещания.
Что делать, если обертка все еще там, но содержимое в контейнере обертки изменилось и / или перезагрузилось через Ajax
? Почему события не запускаются или не работают так, как это было бы в первый раз, когда он связан?
и да, я был на странице docs, я просто не понимаю их объяснения полностью.
1 ответ:
меня немного смущает этот вопрос. Я думаю, это потому, что вы смущает
promise
иdelegate
. Они на самом деле совершенно не связаны с особенностями jQuery. Я объясню каждый отдельно:
delegate
delegate
это функция jQuery, которая была введена в jQuery 1.4.2. (Это более приятный подход кlive
функция, которая была добавлена в jQuery 1.3). Он решает конкретную проблему, которая приходит с изменением DOM, и особенно с AJAX-вызовами.когда вы привязываете обработчик событий, вы привязываете его к выделению. Так что вы могли бы сделать
$('.special').click(fn)
чтобы привязать обработчик событий ко всем членамspecial
класса. Вы привязываетесь к этим элементам, поэтому, если вы затем удалите класс из одного из этих элементов, событие все равно будет вызвано. И наоборот, если вы добавляете класс к элементу (или добавляете новый элемент в DOM), он не будет привязан к событию.есть особенность Javascript, которая смягчает это называется "событие пузырится". Когда событие инициируется, сначала браузер уведомляет элемент, где произошло событие. Затем он поднимается по дереву DOM и уведомляет каждый элемент предка. Это означает, что вы можете привязать обработчик событий к элементу высоко в дереве DOM, а события запускаются на любых дочерних элементах (даже тех, которые не существуют, когда обработчик был привязан).
delegate
это реализация jQuery этого. Во-первых, вы выбираете родительский элемент. Затем вы указываете селектор-обработчик будет запущен только в том случае, если исходный элемент соответствует этому селектору. Затем вы указываете тип события, напримерclick
,submit
,keydown
, так же как и сbind
. Затем, наконец, вы указываете обработчик событий.$('#containingElement').delegate('a.special', 'click', function() { alert('This will happen on all links with the special class'); });
promise
promise
является еще одним относительно недавним дополнением к набору функций jQuery. Это частьDeferred
концепция, которая была введен в jQuery 1.5. (Я думаю, что сходство в звуке между "отложенным" и "делегатом", вероятно, является источником путаницы.) Это способ абстрагирования от сложностей асинхронного кода. Лучший пример этого-с AJAX-вызовами, так как объект возвращается$.ajax
это