【问题标题】:Automatically updating dropdown after change event更改事件后自动更新下拉列表
【发布时间】:2011-07-11 15:23:33
【问题描述】:

我有一个下拉列表,当另一个下拉列表更改时,在 change() 事件中,它通过 jquery ajax 调用填充,代码执行此操作:

    //dropdowns switching        
        $("#eventActivity").bind("change", (function()
        {                     
            $.ajax({
                type:"POST",
                url:"<?php echo site_url('events/get_locations_for_activity'); ?>" + "/" + $(this).val(),
                data: "activityID=" + $(this).val(),
                cache: false,
                dataType: "json",
                success:function(data)
                {
                    //empty the ddl
                    $(".locationDDL").children("select:first").children("option").remove();
                    //go through the json data returned and edit the drop down
                    for( var i = 0 ; i < data.length ; i++)
                    {
                        $(".locationDDL").children("select:first").append("<option value=\"" + data[i].locationID + "\">" + data[i].name + "</option>");
                    }

                }
            });
        })).change(); //force change to run once so it works on load for the first dropdown option

现在,这些下拉菜单位于一个对话框中,当单击“编辑”按钮时会弹出该对话框。我将数据传递给编辑对话框,以便我可以预先填写对话框中的字段。除了将下拉菜单设置为正确的值外,一切正常。
我用来执行此操作的代码在这里:

$("#eventActivity").val(event.activityID);
$("#eventActivity").change(); //force the change handler to update the dropdowns
$("#eventLocation").val(event.locationID); 

如您所见,我设置了第一个下拉列表的值,触发了应该将新值加载到第二个下拉列表的更改事件,然后设置了第二个下拉列表的值。 问题是第三行代码(设置#eventLocation)不起作用,而是选择了下拉列表的默认值,即下拉列表中的第一个值。

非常感谢任何建议!

【问题讨论】:

  • 我忘了提,下拉列表的 HTML 很简单,只有 2 个
  • 您应该使用 jQuery 触发器来激活事件“更改”,就像这样 $('#eventActivity').trigger('change');
  • $("#eventActivity").change();应该可以工作,请参阅:api.jquery.com/change
  • 为什么你不能在ajax成功回调中设置第二个下拉列表的值
  • 您确定您的函数确实获取了数据吗?我不认为这行代码在做你想做的事:url:""。它应该是这样的: url:

标签: jquery ajax drop-down-menu


【解决方案1】:

您应该在 ajax 请求的成功回调中设置最后一个下拉菜单的值。如果最后一个值设置取决于 ajax 请求是否完成,则应将其包含在回调中。您的请求可能在最后一次设置值时尚未完成。

【讨论】:

  • ajax 请求是更改事件的一部分,它是通用的,因为这对下拉列表发生在其他地方,但不会增加在生成的第二个下拉列表中设置值的复杂性。我可以看到您的建议,那就是在我单击“编辑”时执行另一个 ajax 请求并设置下拉列表,以便在成功部分我可以设置值。但是,我希望不必只为这个实例创建一个特殊版本,但似乎我可能不得不这样做。
猜你喜欢
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2019-07-08
  • 2015-12-25
相关资源
最近更新 更多