Столкнулся с довольно странным поведением браузеров. Идея простая: 1) Есть select пустой 2) При клике на нем проверяется что он пустой 3) Если пустой, то грузятся определенные данные в него. т.е. чтото типа PHP: function ListLoad(name, dir) { if ($(name).html() == '') { $(name).load('?act=file_getlist&dir='+dir+'&ajax=1'); } } Серверная сторона передаёт данные сразу в нужном виде. т.е. парсить не надо. причем именно такая форма нужна, чтобы можно было вписать <select onclick="ListLoad(this, 'testdir');"></select> в FireFox всё пашет отлично, но вот во всех других браузерах список не появляется пока не кликнешь в другом месте страницы. т.е. кликнул по списку, он не открылся даже, потом кликнул по любому месту страницы и тогда в списке появились элементы. Как сделать так чтобы не было глюка в других браузерах (Opera/Chrome)? При этом заполнять я не могу их сразу при старте страницы, потому что select тоже генерируются автоматически в зависимости от обстоятельств и везде вставлять JS код который будет сразу подгружать данные неудобно.
if ($(name).html() == '') - как-то не нравится мне строчка эта. Проверяй лучше так Code: if (!$(name).children('option').length) { ... } А вместо onclick юзай обработчик события onmousedown
Используй callback-функцию, которая отработает после загрузки Code: $(name).load('?act=file_getlist&dir='+dir+'&ajax=1', function(data) { alert('Успешно загружено' + data); });
а причем тут она? мне надо чтобы я кликнул по пустому селекту, при этом загрузились данные в него и он открылся. т.е. както надо ожидать пока load не отработает
решил проблему довольно своеобразным методом ) PHP: function ListLoad(name, dir) { if (!$(name).children('option').length) { $.ajaxSetup({async:false}); $(name).load('?act=file_getlist&dir='+dir+'&ajax=1', function() { $.ajaxSetup({async:true}); } ); } } т.е. перед выполнение запроса запрещаем асинхронное выполнение ajax, а в калбек функции разрешаем опять