jquery и динамический SELECT

Discussion in 'PHP' started by slesh, 4 Sep 2011.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Столкнулся с довольно странным поведением браузеров.
    Идея простая:
    1) Есть select пустой
    2) При клике на нем проверяется что он пустой
    3) Если пустой, то грузятся определенные данные в него.
    т.е. чтото типа
    PHP:
    function ListLoad(namedir)
    {
        if ($(
    name).html() == '')
        {
            $(
    name).load('?act=file_getlist&dir='+dir+'&ajax=1');
        }
    }
    Серверная сторона передаёт данные сразу в нужном виде. т.е. парсить не надо.

    причем именно такая форма нужна, чтобы можно было вписать
    <select onclick="ListLoad(this, 'testdir');"></select>

    в FireFox всё пашет отлично, но вот во всех других браузерах список не появляется пока не кликнешь в другом месте страницы.
    т.е. кликнул по списку, он не открылся даже, потом кликнул по любому месту страницы и тогда в списке появились элементы.

    Как сделать так чтобы не было глюка в других браузерах (Opera/Chrome)?
    При этом заполнять я не могу их сразу при старте страницы, потому что select тоже генерируются автоматически в зависимости от обстоятельств и везде вставлять JS код который будет сразу подгружать данные неудобно.
     
  2. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    if ($(name).html() == '') - как-то не нравится мне строчка эта.
    Проверяй лучше так

    Code:
    if (!$(name).children('option').length)
    {
    ...
    }
    
    А вместо onclick юзай обработчик события onmousedown
     
    #2 FindeR, 4 Sep 2011
    Last edited: 4 Sep 2011
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    помогло но частично. как я понял все хрень в том, что load повидимому асинхронно выполняется
     
  4. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20

    Используй callback-функцию, которая отработает после загрузки

    Code:
    $(name).load('?act=file_getlist&dir='+dir+'&ajax=1', function(data)
    {
    alert('Успешно загружено' + data);
    }); 
    
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    а причем тут она? мне надо чтобы я кликнул по пустому селекту, при этом загрузились данные в него и он открылся.
    т.е. както надо ожидать пока load не отработает
     
    #5 slesh, 4 Sep 2011
    Last edited: 4 Sep 2011
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    решил проблему довольно своеобразным методом )
    PHP:
    function ListLoad(namedir)
    {
        if (!$(
    name).children('option').length)
        {
            $.
    ajaxSetup({async:false});
            $(
    name).load('?act=file_getlist&dir='+dir+'&ajax=1'
                function()
                {
                    $.
    ajaxSetup({async:true});
                }
            );
        }
    }
    т.е. перед выполнение запроса запрещаем асинхронное выполнение ajax, а в калбек функции разрешаем опять
     
    #6 slesh, 4 Sep 2011
    Last edited: 4 Sep 2011
Loading...
Similar Threads - jquery динамический SELECT
  1. GAiN
    Replies:
    3
    Views:
    8,134