【问题标题】:Selecting a value on a dynamically populated dropdown list after the list has been populated填充列表后在动态填充的下拉列表中选择一个值
【发布时间】:2012-01-30 05:58:54
【问题描述】:

所以我有一个问题,我的代码在填充列表之前尝试在下拉列表中选择一个值。基本上,它调用一个 javascript 函数,该函数执行 AJAX 发布以从 php.ini 获取下拉值。然后它应该在列表中选择一个值,但是它在填充列表之前执行此操作,因此它找不到该值。关于如何解决这个问题的任何想法?

这是我的代码

这是我获取下拉列表值的地方

function getProjects(id, proj_select_class)
{
    custID = id.options[id.selectedIndex].value;

    $.ajax({
        type: "POST",
        url: "index.php/home/projectlist",
        data: {custID : custID},
        dataType: "json",

        success:function (result){                
            var ddl = $(proj_select_class);

            ddl.children('option:not(:first)').remove();              
            for (var key in result) {
                if (result.hasOwnProperty(key)) {
                    ddl.append('<option value=' + key + '>' +  result[key] + '</option>');                              
                }
            }                         
        }

    }); 
}

这是我设置值的地方。 AddNew() 将新行添加到我的表中。这也在 ajax 调用中。

for (var row in result) {
    AddNew();                                                                   

    client_field = document.getElementById('clients'+id);
    project_field = document.getElementById('projects'+id); 

    client_value = $.trim(result[row].client_id);
    project_value = $.trim(result[row].project_id);     

    //set client                        
    client_field.value = client_value;                      

    getProjects(client_field, project_field, client_value);
    project_field.value = project_value;        
}

【问题讨论】:

    标签: javascript ajax dynamic drop-down-menu delay


    【解决方案1】:

    也许可以尝试使用自定义事件绑定来了解您的代码何时应该从列表中获取值。要绑定到自定义事件,您可以执行以下操作:

    $(document).bind("listpopulated", function(){ /*find value, call AddNew() */ });
    

    并在您的 ajax 成功函数中触发“listpopulated”事件,如下所示:

    $(document).trigger("listpopulated");
    

    参考资料:

    http://api.jquery.com/bind/

    http://api.jquery.com/trigger/

    【讨论】:

    • 无法让它工作。该功能正在被其他东西使用,所以我遇到了问题。
    【解决方案2】:

    通过等待 ajax 通过执行此操作完成运行来修复它

    $(document).ajaxComplete(function(){ set_values(result); });
    

    set_values 是另一个函数,我只是循环遍历所有结果并设置所有下拉值

    【讨论】:

      猜你喜欢
      • 2015-02-16
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多