Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Глючит ajaxSuccess() (https://javascript.ru/forum/jquery/22645-glyuchit-ajaxsuccess.html)

anoth3r 27.10.2011 14:56

Глючит ajaxSuccess()
 
Есть древовидный классификатор, его ветки открываются с помощью AJAX. После загрузки страницы я смотрю есть ли отмеченные позиции в нем и если есть их нужно открыть и отметить.
var i = 1;
var arr = $("#catalog_kved").val().split(","); // получает массив с отмечеными id в классификаторе
$("#kved").ajaxSuccess(function(e, xhr, settings){
	$("#kved").live("openBranchKved", function(){
		$("#"+arr[i++]).children("span").click(); //отмечаем позицию
	});
	$("#kved").trigger("openBranchKved");
});

Проблема в том, что дерево открывается не до конца, срабатывает только 2 AJAX запроса и останавливается, хотя массив отмеченных позиций получаю полный.
Заметил что если после имитирования события click(); прописать alert('someVal'); тогда дерево открывается полностью.
Уже в голову ничего не идет. Буду благодарен за помощь.

Black_Prince 27.10.2011 17:18

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

попытайтесь поиграться в сторону задержки исполнения функции через setTimeout(function(){}, 100); время таймаута по желанию. В принципе 100 мс для пользователя вообще не заметно.

это немного костыль, но если с таймаутом отработает тоже нормально, как и с алертом будете знать хоть в какую сторону копать.

например, попробуйте так:
setTimeout(function(){
$("#"+arr[i++]).children("span").click(); //отмечаем позицию
}, 200);

anoth3r 27.10.2011 19:02

Я тоже об этом думал, уже пытался использовать setTimeout(); игрался с задержкой, но не помогло. alert(); при вызове каким-то образом прекращает выполнение работы скрипта, пока не нажмешь "ок", потом продолжает выполнение. Мне кажется копать нужно в эту сторону, но идеи у меня закончились.

anoth3r 28.10.2011 15:23

Пока специально делаю ошибку
$("#"+arr[i++]).children("span").click();a

и все работает. Но понятно что это криво. Как себя ведет JS или браузер во время ошибки?


Часовой пояс GMT +3, время: 05:38.