jQuery: ajaxStart

Avenus

Under Glory Yield
jQuery: ajaxStart

Привет всем!
На странице есть несколько скрытых блоков div с присвоенными id.
Над каждым блоком есть span, при onclick на котором в блок с соответствующим id загружается инфа и показывается сам блок.
Работает без проблем:
PHP:
$('#div_block'+id).load('request.php').show();
Добавляю перед запросом анимированный gif процесса загрузки:
PHP:
$('#div_block'+id).ajaxStart(function(){$(this).html("<img src='wait.gif'>");});
И получается, если открыть один div_block, а потом другой, то и в первом и во втором показывается этот gif.
Поставил alert в function для ajaxStart:
PHP:
$('#div_block'+id).ajaxStart(function(){
alert(id); // сообщает поочереди все id до этого открываемых блоков
$(this).html("<img src='wait.gif'>");
});
Где я ошибся, подскажите, пожалуйста.
 

Avenus

Under Glory Yield
Чтобы нажал на span для id=1 - стал показываться gif в блоке div_block1. Как загрузилась инфа, в этом блока она показалась.
Нажал на span для id=2 - стал gif в блоке div_block2, но при этом чтобы не показывался gif в блоке div_block1 :)
 

x-yuri

Новичок
у тебя что, при загрузке во второй блок показывается gif в обоих блоках, даже, если первый уже загрузился?
 

Avenus

Under Glory Yield
Да. Во второй инфа загрузилась, а в первом при нажатии на второй показался gif и так и остался.

-~{}~ 24.09.09 23:19:

Т.е. именно при нажатии на второй блок, показывается gif и в первом и во втором. После загрузки инфы в тот блок, на который нажал в первом так и показывается такой же gif.
Если третий открыл, то в первом и втором gif.

-~{}~ 24.09.09 23:24:

jQuery беру отсюда:
http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js

-~{}~ 24.09.09 23:29:

Вот, собственно пример кода:
PHP:
<span onClick='func(1);'>Block1</span>
<div id='div_block1'></div>
<span onClick='func(2);'>Block2</span>
<div id='div_block2'></div>
И js-функция:
PHP:
function func(id){
$('#div_block'+id).
show().
ajaxStart(function(){$(this).html("<img src='wait.gif'>");}).
load('request.php');
}
 

x-yuri

Новичок
ну так, ты же не убираешь обработчик с первого div'а. Вообще не так делать нужно: назначай callback в функции load
 

Avenus

Under Glory Yield
Т.е. как не убираю?
x-yuri, имеешь ввиду назначил ajaxStart, а complete нет?
Почему тогда после загрузки инфы в первый div в нем инфа вместо gif показывается, а потом при начале загрузки во второй div gif в обоих показывается, но исчезает только во втором при загрузке инфы в него. А в первом так и крутится gif?
 

Mols

Новичок
.ajaxStart работает без привязки к конкретному элементу. Если установить обработчик хоть для 10 дивов - в 10 дивах будет выполнятся объявленный код (вне зависимости от того в какой элемент будет загружен контент. Важно только то, в данный момент идет аякс запрос)
 

Avenus

Under Glory Yield
Может лучше как-то по-другому сделать показ лоадера во время загрузки инфы? :)

-~{}~ 24.09.09 23:52:

Mols, теперь понял как он работает. Спасибо!

-~{}~ 24.09.09 23:54:

Так работает:
PHP:
$('#div_block'+id).
.show()
.html("<img src='wait.gif'>")
.load('request.php');
 
Сверху