Вторник, 14.05.2024, 09:50
Меню сайта
Категории раздела
JQuery плагины [59]
JQuery уроки [69]
PHP полезное [24]
PHP уроки [21]
Css [26]
JS [3]
SQL [9]
Css 3 [17]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » JQuery уроки

JQuery live()

.live( типСобытия, обработчик )

Возвращает: jQuery

Описание: Прикрепляет обработчик к событию для всех элементов, которые соответствуют текущему селектору, в настоящее время или в будущем.

.live( типСобытия, обработчик )

Добавлена в версию: 1.3
типСобытия
Строка
Строка, содержащая тип события JavaScript, такие как "click" или "keydown". Начиная с jQuery 1.4 строка также может содержать несколько, разделенных пробелами типов событий или пользовательские имена событий.
обработчик
Функция
Функции для выполнения во время вызова события.

.live( типСобытия, данныеСобытия, обработчик )

Добавлена в версию: 1.4
типСобытия
Строка
Строка, содержащая тип события JavaScript, такие как "click" или "keydown". Начиная с jQuery 1.4 строка также может содержать несколько, разделенных пробелами типов событий или пользовательские имена событий.
данныеСобытия
Карта
Карта данных, которые будут переданы в обработчик события.
обработчик
Функция
Функции для выполнения во время вызова события.

Этот метод является вариацией базового метода .bind() для подключения обработчиков событий для элементов. Когда .bind() вызывается, элементы, к которым относится объект jQuery получают прикрепленный обработчик; элементы, которые введены позже не получают его, поэтому они будут нуждаться в другом вызове .bind(). Для наглядности, рассмотрим HTML:

<body>
 <div class="clickme">
 Click here
 </div>
</body>

Мы можем связать простой обработчик щелчка мыши на этот элемент:

$('.clickme').bind('click', function() {
 // Bound handler called.
});

Когда элемент нажали, обработчик вызывается. Тем не менее, предположим, что после этого еще один элемент добавляется:

$('body').append('<div class="clickme">Another target</div>');

Этот новый элемент также соответствует селектору .clickme, но, поскольку он был добавлен после вызова .bind(), нажатие на него ничего не даст.

Метод .live() является альтернативой такого поведения. Если мы связываем обработчик нажатия к целевому элементу с помощью этого метода:

$('.clickme').live('click', function() {
 // Live handler called.
});

И затем, когда новый элемент добавлен:

$('body').append('<div class="clickme">Another target</div>');

Затем нажатие на новый элемент также запустит обработчик.

Делегирование событий

Метод .live() может повлиять на элементы, которые еще не были добавлены к DOM с помощью события делегации: обработчик привязанный к предку элемента несет ответственность за события, которые вызваны на его потомков. Обработчик, переданный с .live() никогда не привязывется к элементу; вместо этого, .live() привязывает специальный обработчик к корню дерева DOM. В нашем примере, когда новый элемент нажат, происходят следующие шаги:

  1. Событие нажатия генерируется и передается в <div> для обработки.
  2. Ни один обработчик напрямую не привязывается к <div>, таким образом событие распространяется вверх по дереву DOM.
  3. Событие поднимается вверх пока не достигает корня дерева, к которому .live() прикрепил по умолчанию специального обработчика.
    * Начиная с jQuery 1.4, распространение события можно опционально остановить "контекстно" на элементе DOM.
  4. Специальный обработчик нажатия, прикрепленный с помощью .live() выполняется.
  5. Обработчик тестирует цель события объекта, чтобы посмотреть должен ли он продолжать. Этот тест проводится путем проверки, если $(event.target).closest('.clickme') может найти соответствующий элемент.
  6. Если соответствующий элемент найден, оригинальный обработчик вызывается на него.

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

Смотрите обсуждение по .bind() для более подробной информации о связвании события.

Множественные события

Начиная с jQuery 1.4.1 .live() может принимать множественные, разделенные запятой события, аналогичные функциональной возможности, предоставленной в .bind(). Например, мы можем "прикрепить в живую" события mouseover и mouseout в одно и то же время, как:

$('.hoverme').live('mouseover mouseout', function(event) {
 if (event.type == 'mouseover') {
 // do something on mouseover
 } else {
 // do something on mouseout
 }
});

Данные события

Начиная с jQuery 1.4, опциональный параметр eventData позволяет нам передавать дополнительную информацию в обработчик. Одно удобное применение этого параметра, это обход проблем, связанных с закрытием. Смотрите обсуждение метода .bind() "Передача данных событий" для более подробной информации.

Контекст события

Начиная с jQuery 1.4, живые события могут быть прикрепленны к "контексту" элемента DOM, а не к корню документа, по умолчанию. Для определения этого контекста, мы используем второй аргумент функции jQuery(), переданный в единственный элемент DOM (в противовес к коллекции jQuery или селектору).

$('div.clickme', $('#container')[0]).live('click', function() {
 // Live handler called.
});

Обработчик live в этом примере вызывается только тогда, когда <div class="clickme"> это потомок элемента с идентификатором "container."

Предостережения

Техника .live() является полезной, но из-за своего особого подхода не может быть просто заменена на .bind() во всех случаях. Конкретные различия включают в себя:

  • Методы обхода DOM не полностью поддерживаются для нахождения элементов для отправки в .live(). Пожалуй, метод .live() всегда должен быть вызван непосредственно после выбора, как в приведенном выше примере.
  • Чтобы остановить дальнейшие обработчики от исполнения после первого связывания используя .live(), обработчик должен вернуть false. Вызов .stopPropagation() не решит эту задачу.
  • В jQuery 1.3.x только следующие события JavaScript (в дополнение к пользовательским событиям) могут быть прикрепленны с .live(): click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, и mouseup.
  • Начиная с jQuery 1.4 метод .live() поддерживает пользовательские события так же как и все события JavaScript. Начиная с jQuery 1.4.1 даже focus и blur работают с методом live (соответствующие более подходящим событиям focusin и focusout).
  • Начиная с jQuery 1.4.1 событие hover может быть определенно (соответствует mouseenter и mouseleave, которые, в свою очередь, соответствуют mouseover и mouseout).

Примеры

Пример 1

Нажмите на параграфе, чтобы добавить еще один. Обратите внимание, событие по нажатию привязывается и ко всем новым параграфам.
 
$("p").live("click", function(){
 $(this).after("<p>Another paragraph!</p>");
 });

Пример 2

Отображение содержимого параграфа в сообщении alert при нажатии:
$("p").live("click", function(){
 alert( $(this).text() );
});

Пример 3

Для отмены действия по умолчанию и предотвращения передачи событий необходимо возвратить false:
$("a").live("click", function() { return false; })

Пример 4

Для отмены только действия по умолчанию необходимо использовать метод preventDefault.
$("a").live("click", function(event){
 event.preventDefault();
});

Пример 5

Пример связывания пользовательских событий.
 $("p").live("myCustomEvent", function(e, myName, myValue){
 $(this).text("Hi there!");
 $("span").stop().css("opacity", 1)
 .text("myName = " + myName)
 .fadeIn(30).fadeOut(1000);
 });
 $("button").click(function () {
 $("p").trigger("myCustomEvent");
 });
 
Категория: JQuery уроки | Добавил: ChronoW (09.01.2013) | Автор: JQuery live()
Просмотров: 2198 | Комментарии: 2 | Теги: JQuery live() | Рейтинг: 0.0/0
Всего комментариев: 1
1 Veronikapt  
0
Салют народ! Смотрела у вас тут этот фильм (На пятьдесят оттенков темнее -полную версию) Вот: http://kinopoisky.ru/29605-na-pyatdesyat-ottenkov-temnee.html - web-development.ucoz.ru/kino/На пятьдесят оттенков темнее
Понравился очень, необычное кино. прикольно) Хи хи))
Кто еще Смотрел этот фильм?

Имя *:
Email *:
Код *: