我有这样的代码:
var options = $("#drop");
$.getJSON("/services.asmx/GetResults", params, function (result) {
$.each(result, function () {
//alert(this.Name) works!
options.append($("<option />").text("test"));
});
});
//options.append($("<option />").text("test")); Works!
并没有附加我的下拉列表。如果我将该行移出getJSON方法,它就可以工作。我调试了,返回的所有数据(结果)都是正确的,没有错误。本来我想添加this.Name而不是“test”,但即使是简单的字符串也不会附加..这里有什么问题?
更新:我刚想通了,我正在使用jquery CHOSEN插件,它将选项标签转换为li。我打赌那是个问题。我仍然没有解决问题,并想知道为什么它只能在服务电话之外工作,但不在内部..谢谢你的答案!!!
答案 0 :(得分:2)
我测试了你的代码,它对我有用。我唯一能想到的是你选择下拉列表是不正确的。你说:
var options = $("#drop");
但我注意到您正在调用ASMX Web服务。您的下拉列表是ASP.NET DropDownList吗?如果它是ASP.NET DropDownList,您的标记可能类似于:
<asp:DropDownList runat="server" ID="drop">
当在客户端呈现此内容时,ID不再是 drop 。它更像是* ParentControlID_drop *。
仔细检查您的选择器。
答案 1 :(得分:2)
您是否仅在IE中遇到此问题?
在循环警报(options.html())之后,您可能会发现html看起来正确但在页面上没有更新。某些浏览器中存在一些DOM缓存问题,这些问题会缓存DOM更改,直到读取需要渲染的属性为止。
我之前通过在填充后隐藏并显示下拉列表来修复此问题。这听起来很疯狂,但值得一试。
编辑:可能是宽度更改而不是隐藏/显示
答案 2 :(得分:0)
问题在于jquery Chosen插件,该插件获取标准下拉列表并转而使用