使用 jQuery AJAX 填充 ASP.Net CheckBoxList ClientSide

Posted

技术标签:

【中文标题】使用 jQuery AJAX 填充 ASP.Net CheckBoxList ClientSide【英文标题】:Populate ASP.Net CheckBoxList ClientSide using jQuery AJAX 【发布时间】:2017-11-30 23:15:43 【问题描述】:

我正在按照http://www.aspforums.net/Threads/120224/Populate-ASPNet-CheckBoxList-ClientSide-using-jQuery-AJAX/中的说明进行操作

这确实会填充复选框列表,但是单击的任何标签都会选中或取消选中复选框列表中的第一项。如何修复代码以让“for”标签指向正确的复选框 javascript 返回 xml

 <asp:CheckBoxList ID="chkaddressemails" Width="300px" runat="server">
 </asp:CheckBoxList>



 function GetDropDownData(o) 

            var ddlTestDropDownListXML = document.getElementById(o.id);


            // Provide Some Table name to pass to the WebMethod as a parameter.
            var tableName = ddlTestDropDownListXML.options[ddlTestDropDownListXML.selectedIndex].value;


            $.ajax(
                type: "POST",
                url: "Reports.aspx/GetDropDownItems",
                data: 'tableName: "' + tableName + '"',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) 

                    var xmlDoc = $.parseXML(response.d);
                    var xml = $(xmlDoc);
                    var customers = xml.find("Table1");
                    var row = $("[id*=chkaddressemails] tr:last-child").clone(true);
                    $("[id*=chkaddressemails] tr").remove();
                    $.each(customers, function () 
                        var customer = $(this);

                        $("input", row).val($(this).find("Email").text());
                        $("label", row).html($(this).find("Grouping").text()); 

                        $("[id*=chkaddressemails] tbody").append(row);
                        row = $("[id*=chkaddressemails] tr:last-child").clone(true);

                    );
                ,
                failure: function (response) 
                    alert(response.d);
                
            );
        

【问题讨论】:

能否请您将 ASP 转换为 HTML,以便我们有一个 minimal reproducible example? 上面的网址是我使用的aspforums.net/Threads/120224/… 您需要在追加行之前设置标签的“for”属性,您正在克隆并一遍又一遍地使用具有相同属性的相同元素。 你能告诉我那会是什么样子吗? 【参考方案1】:

下面是答案。 ajax 调用一个静态函数,该函数返回一个转换为 xml 的数据表。 然后我清除旧数据并重新填充复选框列表。我还获取了值并将其放入文本框中。

<asp:DropDownList ID="ddladdresscustomers" Width="300px" AutoPostBack="false" onchange="GetDropDownData(this);" runat="server"></asp:DropDownList>

     function GetDropDownData(o) 

            var ddlTestDropDownListXML = document.getElementById(o.id);


            // Provide Some Table name to pass to the WebMethod as a parameter.
            var tableName = ddlTestDropDownListXML.options[ddlTestDropDownListXML.selectedIndex].value;


            $.ajax(
                type: "POST",
                url: "Reports.aspx/GetDropDownItems",
                data: 'tableName: "' + tableName + '"',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) 

                    var xmlDoc = $.parseXML(response.d);
                    var xml = $(xmlDoc);
                    var customers = xml.find("Table1");

                    var table = $('<table></table>');
                    var counter = 0;
                    var customer = $(this);
                    $.each(customers, function () 




                        table.append($('<tr></tr>').append($('<td></td>').append($('<input>').attr(
                            type: 'checkbox', name: 'chklistitem', value: $(this).find("Email").text(), id: 'chklistitem' + counter
                        )).append(
                        $('<label>').attr(
                            for: 'chklistitem' + counter++
                        ).text($(this).find("Grouping").text()))));
                    );

                    var y = $('#<%= chkaddressemails.ClientID %>');   
                    getallfromcheckbox();
                    removeCheckBoxItem();
                    y.append(table);

                ,
                failure: function (response) 
                    alert(response.d);
                
            );
        

function removeCheckBoxItem()




    $("[id*=chkaddressemails] :checkbox").parent().remove();


        function getallfromcheckbox()

            var retur = '';

                var y = $('#<%= txtaddressemail.ClientID %>');
            var names = [];
            $('[id*=chkaddressemails] input:checked').each(function () 
                names.push(this.name);

                retur += (this.value) +';';

            );


            document.getElementById("<%= txtscheduleemail.ClientID %>").value = retur;
        

【讨论】:

以上是关于使用 jQuery AJAX 填充 ASP.Net CheckBoxList ClientSide的主要内容,如果未能解决你的问题,请参考以下文章

Jquery DataTable 将参数传递给ajax 调用asp.net。无效的 JSON 原语

使用jQuery AJAX调用WebMethod时,不会触发ASP.NET 4.0 Custom IHttpModule

如何使用 ajax 在 Asp.net 中填充下拉列表

asp.net webforms ajax 更新gridview

如何通过 ajax 使用数据库数据填充 ASP.NET MVC 4 下拉列表

根据在另一个文本框中键入的文本,使用 AJAX 更新面板在 ASP.NET 中自动填充文本框