Daily Archives: 27.06.2011
jQuery.deferred
В jQuery 1.5 была полностью переработана модель асинхронных запросов. Теперь они возвращают deferred-объект, содержащий promise-объект, который содержит методы, позволяющие узнать состояние запроса или навесить дополнительные обработчики. promise-Объект содержит методы then, done, fail, isResolved и isRejected. Суть нового подхода состоит в следующем:
| 
					 1 2 3 4 5 6 7  | 
						$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1,  a2){   // a1 и a2 - аргументы, отвечающие соответственно за запросы к страницам page1 и page2   var jqXHR = a1[2]; /* массив состоит из [ "success", statusText, jqXHR ] */   if ( /Оппа!/.test(jqXHR.responseText) ) {     alert("Где-то на первой странице есть 'Оппа!'.");   } });  | 
					
$.when принимает deferred-объект или объекты и возвращает promise-объект. Можно делать и так:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						var $promise; if ( tt == 1 ) {   $promise = $.when( $.getJSON( ... ) ); } else if ( tt == 2 ) {   $promise = $.when( $.getJSON( ... ), $.getJSON( ... ), $.post( ... ) ); } else {   $promise = $.when( console.log( 'else' ) ); } $promise.   then( function() { console.log( 'done', data ) } );  | 
					
…
jQuery.delegate
jQuery.delegate и jQuery.undelegate появились в jQuery 1.4.2. Это аналоги .live и .die(). У .live и .die() есть проблемы с, к примеру, вложенными объектами, с встраиванием в цепочки и много ещё. Синтаксис .delegate отличается от .live и, соответственно, .click и т.п. Пример использования:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  | 
						// Using .live()   $("table").each(function(){     $("td", this).live("hover", function(){       $(this).toggleClass("hover");     });   }); // Using .die()   $("table").each(function(){     $("td", this).die("hover");   }); // Using .delegate()   $("table").delegate("td", "hover", function(){     $(this).toggleClass("hover");     }); // Using .undelegate()   $("table").undelegate("td", "hover");  | 
					
http://api.jquery.com/delegate/ Работа с событиями в jQuery 1.7+