2011-04-06 2 views
4

Я использую jQuery 1.4.4 и хотел бы знать, могу ли я использовать .live() для событий Ajax, таких как ajaxStart/ajaxComplete. Я вразумлял эти события с .bind() и она работает до сих порЯвляется ли .live() возможным для ajaxStart und ajaxComplete?

jQuery(sourceId).bind("ajaxSend", function(event, xhr, ajaxOptions) { 
    // do something 
}); 

equivalent 

jQuery(sourceId).ajaxSend(function(event, xhr, ajaxOptions) { 
    // do something 
}); 

Обязывающее с .live() будет лучше для моих случаев использования. Это вообще возможно? Я где-то читал, что следующий фрагмент не работает

jQuery(sourceId).live("ajaxSend", function(event, xhr, ajaxOptions) { 
    // do something 
}); 

Заранее благодарим за ваши ответы.

ответ

1

Нет его нельзя использовать в прямом эфире, а не связывать ...

2

Вы не можете сделать это с живой(), хотя вы могли бы быть в состоянии сделать это с помощью пользовательского события.

Импликация с помощью функции live() заключается в том, что вы добавляете элементы динамически. Динамически загруженные элементы должны выполняться в результате какого-либо события или обратного вызова AJAX, поэтому в событии обратного вызова устанавливается новое связывание событий.

callback event... 
    //code thatadds the new elements... 

    jQuery('selector that identifies the new elements').bind("ajaxSend", function(event, xhr, ajaxOptions) { 
     // do something 
    }); 

Возможно, вы захотите обернуть свой код функцией.

Посмотрите на комментариях здесь, скопированный из http://api.jquery.com/live/

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

DOM traversal methods are not supported for finding elements to send to .live(). Rather, the .live() method should always be called directly after a selector, as in the example above. 
To stop further handlers from executing after one bound using .live(), the handler must return false. Calling .stopPropagation() will not accomplish this. 
In jQuery 1.3.x only the following JavaScript events (in addition to custom events) could be bound with .live(): click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, and mouseup. 

    As of jQuery 1.4 the .live() method supports custom events as well as all JavaScript events that bubble. 
    As of jQuery 1.4.1 even focus and blur work with live (mapping to the more appropriate, bubbling, events focusin and focusout). 
    As of jQuery 1.4.1 the hover event can be specified (mapping to mouseenter and mouseleave, which, in turn, are mapped to mouseover and mouseout). 
+0

Привет, Даниэль. Благодарю. Да, я уже читал комментарии для .live() из документа. Что ж. Тогда я буду придерживаться .bind. Я вызываю .bind() в динамически добавленных/обновленных страницах, как вы писали. Я думал, что могу сделать это один раз где-то в конце страницы и не забочусь об обновленных страницах, связанных с ajaxStart/ajaxComplete. Но я вижу, что это не сработает. – Oleg

+0

Несчастливо, но браузеры, похоже, не поднимают событие onload для элементов или событие изменения на DOM. Я полагаю, что это было бы слишком дорогостоящим ресурсом. –

Смежные вопросы