Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Поскольку события, генерируемые реализацией архитектуры Ajax, являются нестандартными и генерируются самой библиотекой jQuery, а не броузером, объект

Event
, передаваемый обработчикам, не содержит сколько-нибудь полезной информации. Однако вместе со всеми событиями - «ajaxSend», «ajaxSuccess», «ajaxError» и «ajaxComplete» - передаются дополнительные аргументы. Всем обработчикам этих событий будет передаваться два дополнительных аргумента. В первом дополнительном аргументе будет передаваться объект
XMLHttpRequest
, а во втором - объект с параметрами. Это означает, что обработчик события, например «ajaxSend», сможет добавлять собственные заголовки в объект
XMLHttpRequest
, подобно функции обратного вызова
beforeSend
. Обработчикам события «ajaxError»
передается третий дополнительный аргумент помимо двух, только что описанных. В этом последнем аргументе будет передаваться объект
Error
, если таковой имеется, который был создан в результате возникшей ошибки. Довольно странно, но обработчикам событий архитектуры Ajax не передается код состояния, генерируемый библиотекой jQuery. Если, например, в обработчике события «ajaxSuccess» потребуется отличать состояния «success» и «notmodified», необходимо будет проверить код состояния HTTP-ответа в объекте
XMLHttpRequest
.

Последние два события, перечисленные в таблице выше, отличаются от других тем, что не имеют соответствующих им функций обратного вызова, а также тем, что их обработчикам не передаются дополнительные аргументы. «ajaxStart» и «ajaxStop» - это пара событий, которые извещают о начале и окончании выполнения сетевых операций при выполнении Ajax-запроса. Когда библиотека jQuery не выполняет ни одного Ajax-запроса и инициируется новый запрос, она возбуждает событие «ajaxStart». Если до того, как завершится первый запрос, будут запущены новые запросы, эти новые запросы не будут вызывать появление нового события «ajaxStart». Событие «ajaxStop» генерируется, когда завершится последний Ajax-запрос и при этом библиотека jQuery уже не выполняет никаких сетевых операций. Эта пара событий может пригодиться для отображения и сокрытия анимированного сообщения «Загрузка...» или изображения, свидетельствующего о выполнении сетевых операций. Например:

$("#loading_animation").bind({

ajaxStart: function {

$(this).show; },

ajaxStop: function { $(this).hide: }

});

Обработчики событий «ajaxStart» и «ajaxStop» можно связать с любым элементом документа: библиотека jQuery генерирует их глобально (раздел 19.4.6), а не для какого-то конкретного элемента. Другие четыре события архитектуры Ajax-«ajaxSend», «ajaxSuccess», «ajaxError» и «ajaxComplete» - также обычно генерируются глобально, поэтому их обработчики также можно связать с любым элементом документа. Однако если установить параметр context при вызове функции

jQuery.ajax
, эти четыре события будут генерироваться только в контексте указанного элемента.

Наконец, запомните, что появление всех событий архитектуры Ajax в библиотеке jQuery можно предотвратить, присвоив параметру

global
значение false. Несмотря на обескураживающее имя параметра
global
, присваивание ему значения false предотвращает возбуждение событий не только в глобальном масштабе, но и в объекте context.

19.7. Вспомогательные функции

Библиотека jQuery определяет множество вспомогательных функций (и два свойства), которые могут вам пригодиться в ваших программах. Как вы увидите в списке ниже, для многих из этих функций теперь имеются эквиваленты в стандарте ECMAScript 5 (ES5). Функции в библиотеке jQuery были созданы еще до появления стандарта ES5 и действуют во всех броузерах. Ниже в алфавитном порядке перечислены вспомогательные функции:

jQuery.browser

Свойство

browser
является не функцией, а объектом, который можно использовать для определения типа броузера (раздел 13.4.5). Если сценарий выполняется в IE, свойство
msie
этого объекта будет иметь значение true. В Firefox и родственных ему броузерах значение true будет иметь свойство
mozilla
. В Safari и Chrome значение true будет иметь свойство
webkit
, а в броузере Opera значение true будет иметь свойство
opera
. В дополнение к этим свойствам объект
browser
имеет также свойство
version
,
содержащее номер версии броузера. Приема определения типа броузера лучше стараться избегать, насколько это возможно, тем не менее это свойство можно использовать обхода ошибок, характерных для разных броузеров, как показано ниже:

if ($.browser.mozilla && parselnt($.browser.version) < 4) {

// Здесь обрабатывается гипотетическая ошибка в Firefox...

}

jQuery.contains

Эта функция принимает в аргументах два элемента документа. Она возвращает true, если первый элемент содержит второй, иначе возвращает значение false.

jQuery.each

В отличие от метода

each,
который выполняет итерации только по объектам
jQuery
, вспомогательная функция
jQuery.each
способна выполнять итерации по элементам массива или свойствам объекта. В первом аргументе она принимает массив или объект, по которому выполняются итерации. Во втором аргументе принимается функция, которая должна быть вызвана для каждого элемента массива или свойства объекта. Этой функции передаются два аргумента: индекс элемента массива или имя свойства объекта и значение элемента массива или свойства объекта. Значение ссылки this в этой функции совпадает со значением второго аргумента. Если функция вернет false,
jQuery.each
сразу же вернет управление, не завершив итерации. Функция
jQuery.each
всегда возвращает значение первого аргумента.

Перечисление свойств функцией

jQuery.each
выполняется в том же порядке, что и в обычном цикле
for/in
, т.е. в итерациях участвуют все перечислимые свойства, включая унаследованные. Перечисление элементов массива функцией
jQuery.each
выполняется в порядке следования их индексов, и она не пропускает неопределенные элементы в разреженных массивах.

jQuery.extend

Эта функция принимает объекты в своих аргументах. Она копирует свойства из второго и всех последующих объектов в первый объект, затирая все одноименные свойства в первом объекте. Она пропускает все свойства, имеющие значение undefined или null. Если передать ей только один объект, свойства этого объекта будут скопированы в сам объект jQuery. Возвращаемым значением функции является объект, в который копировались свойства. Если в первом аргументе передать значение true, будет выполнено глубокое, или рекурсивное, копирование: второй аргумент будет дополнен свойствами третьего (и всех последующих) объектов.

Эту функцию удобно использовать для создания копий объектов и объединения объектов с параметрами с настройками по умолчанию:

var clone = jQuery.extend({}, original);

var options = jQuery.extend({}, default_options, user_options); jQuery.globalEval

Эта функция выполняет строку с программным кодом на языке JavaScript в глобальном контексте, как если бы она была содержимым элемента

<script>.
(В действительности эта функция создает элемент
<script>
и временно вставляет его в документ.)

jQuery.grep

Эта функция похожа на метод

filter
объекта
Array
, определяемый стандартом ES5. В первом аргументе она принимает массив, а во втором - функцию-предикат и вызывает эту функцию для каждого элемента массива, передавая ей значение и индекс элемента. Функция
jQuery.grep
возвращает новый массив, содержащий только те элементы аргумента-массива, для которых функция-предикат вернула значение true (или другое значение, которое оценивается как истинное). Если в третьем аргументе передать функции
jQuery.grep
значение true, она будет инвертировать возвращаемое значение функции-предиката и вернет массив элементов, для которых функция-предикат вернула ложное значение.

Поделиться:
Популярные книги

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Сын счастья

Вассму Хербьёрг
2. Книга Дины
Проза:
современная проза
5.00
рейтинг книги
Сын счастья

Я – Легенда

Гарцевич Евгений Александрович
1. Я - Легенда!
Фантастика:
боевая фантастика
попаданцы
рпг
фантастика: прочее
5.00
рейтинг книги
Я – Легенда

На границе империй. Том 10. Часть 8

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 8

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

Второгодка. Книга 3. Ученье свет

Ромов Дмитрий
3. Второгодка
Фантастика:
городское фэнтези
сказочная фантастика
альтернативная история
5.00
рейтинг книги
Второгодка. Книга 3. Ученье свет

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

На границе империй. Том 7. Часть 5

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Древесный маг Орловского княжества 6

Павлов Игорь Васильевич
6. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 6

Лейб-хирург

Дроздов Анатолий Федорович
2. Зауряд-врач
Фантастика:
альтернативная история
7.34
рейтинг книги
Лейб-хирург

Мастер порталов

Лисина Александра
8. Гибрид
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер порталов