Глючит 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'); тогда дерево открывается полностью. Уже в голову ничего не идет. Буду благодарен за помощь. |
Если после имитирования клика алертом - отрабатывает нормально, то скорее всего без него не работает потому что не успевает создаться весь DOM элементов.
попытайтесь поиграться в сторону задержки исполнения функции через setTimeout(function(){}, 100); время таймаута по желанию. В принципе 100 мс для пользователя вообще не заметно. это немного костыль, но если с таймаутом отработает тоже нормально, как и с алертом будете знать хоть в какую сторону копать. например, попробуйте так: setTimeout(function(){ $("#"+arr[i++]).children("span").click(); //отмечаем позицию }, 200); |
Я тоже об этом думал, уже пытался использовать setTimeout(); игрался с задержкой, но не помогло. alert(); при вызове каким-то образом прекращает выполнение работы скрипта, пока не нажмешь "ок", потом продолжает выполнение. Мне кажется копать нужно в эту сторону, но идеи у меня закончились.
|
Пока специально делаю ошибку
$("#"+arr[i++]).children("span").click();a и все работает. Но понятно что это криво. Как себя ведет JS или браузер во время ошибки? |
Часовой пояс GMT +3, время: 05:38. |