【发布时间】: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