z-song / demo.laravel-admin.org

Source code of official http://demo.laravel-admin.org website.
507 stars 250 forks source link

三级联动select时通过javascript修改select值时不能正确显示 #32

Open robinhoo1973 opened 6 years ago

robinhoo1973 commented 6 years ago

通过调用apiModalEditData(apiUrl)正确拿到数据的json,然后在将对应值填入表单时,只有第一层省份信息是正确的.调试过程发现联动的$.get()出现时延,导致下层数据出来后,被上层数据覆盖.而且修改值的顺序也是省、市、区.下面是用来将json数据填写表单时用到的script

function domEquipment(key,value)
{
    var dom = $('[name=' + key + ']');
    console.log('[name=' + key + ']='+value);
    if (dom.is('select')) 
    {
        dom.val(value).trigger('change');
        $("option", dom).each(function() 
        {
            if (this.value == value) 
            {
                this.selected = true;
            }
            else
            {
                this.selected = false;
            }
        });
        dom.val(value).trigger('change');
        console.log(dom);
    } 
    else 
    {
        switch (dom.attr("type"))
        {
            case "text":
            case "hidden":
            case "textarea":
                dom.val(value).trigger('change');
                break;
             case "radio":
             case "checkbox":
                dom.val(value).trigger('change');
                dom.each(function() 
                 {
                     if ($(this).attr('value') == value) 
                     {
                         $(this).attr("checked", value);
                     }
                 });
                 break;
        }

    }
};

function populateForm(frm, data) 
{
    $.each(JSON.parse(data), function(key, value) 
    {
        domEquipment(key,value);
    });
};

function apiModalEditData(apiUrl)
{
    $.get(apiUrl, function (data) 
    {
        data=data.replace('[','').replace(']','');
        populateForm('.modal_form',data);
    });
};
robinhoo1973 commented 6 years ago

已自己解决了,通过触发'change.select2'实现,同时将相应的options找出来,重新装载