没有填充$ .each中的下拉列表

时间:2011-08-08 22:34:05

标签: jquery

我有这样的代码:

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。我打赌那是个问题。我仍然没有解决问题,并想知道为什么它只能在服务电话之外工作,但不在内部..谢谢你的答案!!!

3 个答案:

答案 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插件,该插件获取标准下拉列表并转而使用

  • 标签而不是。仅供参考,它还会消除价值和其他属性。我不得不使用Chosen.js脚本将其恢复原状并使其正常工作。

    Chosen plugin