我试图在用户点击选择字段时使用getJSON动态地将选项附加到下拉菜单中(使用on('click')事件):
$.getJSON(url, function (data) {
if (data) {
caller.find('option').remove().end();
var options = "";
$.each(data, function (Index, Choice) {
options += "<option value=" + Choice.Value + ">" + Choice.Text + "</option>";
});
caller.append(options);
}
});
数据检索成功,但选项不会立即显示在下拉列表中,因此用户无法看到它们。只显示第一个选项,这是默认选项(未通过ajax检索),因此用户需要单击它,然后关闭下拉菜单,如果再次单击,则显示所有值,以便他可以选择一个。
似乎是同步问题 - 在ajax调用完成之前显示值。在我的情况下,这意味着显示“请选择”,这是默认值,并且在HTML中是静态的。然后在后台检索json,但是当菜单显示选项时,它们不会在运行时填充。需要关闭菜单并重新选择。
这是Chrome和IE的问题(在FF上工作)=&gt;因此发生在Android设备和可能是Windows手机(没有测试过这个)。在每个动态下拉列表上单击两次真的很令人沮丧。
编辑: 将查询转换为ajax(设置async = false),但结果仍然相同:
$.ajax({
type: 'GET',
dataType: 'json',
async: false,
url: url,
data: 'qid=' + questionID + '&qa=' + jsonQA,
success: function (data) {
if (data) {
caller.find('option').remove().end();
var options = "";
$.each(data, function (Index, Choice) {
options += "<option value=" + Choice.Value + ">" + Choice.Text + "</option>";
});
caller.append(options);
}
},
processData: false,
});