JQuery从li获取特定属性

时间:2014-04-15 09:26:08

标签: javascript jquery asp.net

我有以下问题。我有一个asp gridview,每行都有一个无序列表。 每个列表都是可排序的,并连接到列表之间的拖动项目。 但是我无法获得这些列表的值。

我尝试过以下功能:

var routedQuestions = $(this).find("#sortable2").map(function (i, n) {
                return $(n).attr('value');
            }).get().join(',');

以及:

var routedQuestions = $(this).find("#sortable2").sortable('toArray', { attribute: 'value' });

当我第一次将项目添加到列表中时,这是有效的,但如果列表中已有项目则不行。

知道我在哪里错了吗? 我还没有在网上找到解决方案。


编辑:

页面的实际脚本如下:

<asp:GridView ID="gvQuestionnaireRouting" runat="server" AutoGenerateColumns="False"
            CssClass="table table-striped table-hover"
            DataKeyNames="QuestionnaireID" CellPadding="4" ForeColor="#333333"
            GridLines="None" ClientIDMode="Static">
<AlternatingRowStyle BackColor="White" />
<Columns>
    <asp:TemplateField HeaderText="">
        <ItemTemplate>
            <asp:HiddenField ID="hdnQuestionnaireID" Value='<%# Bind("QuestionnaireID") %>' runat="server" />
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Question">
        <ItemTemplate>
            <asp:Label ID="lblQuestion" runat="server" Text='<%# Bind("QuestionText") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Routed Questions">
        <ItemTemplate>
            <ul id="sortable2" class="droptrue" runat="server">
            </ul>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

listItems在运行时生成,如下所示:

<li value="1">Some text</li>

为了清晰起见,整个保存功能:

function SaveAll() {
        $("#<%=gvQuestionnaireRouting.ClientID%> tr:has(td)").each(function() {
            //var routedQuestions = $(this).find("#sortable2").sortable('toArray', { attribute: 'value' });
            var routedQuestions = $(this).find("#sortable2").map(function (i, n) {
                return $(n).attr('value');
            }).get().join(',');
            var ParentID = $(this).find('input[id$=ParentQuestionElementID]').val();

            $(this).find("#sortable2 li").each(function () {
                var routingRule = $(this).find("#ddlRoutingRule").val();
                var routingValue = $(this).find("#txtRoutingValue").val();
                $.ajax({
                    url: "AdminRouting.aspx/SaveData",
                    type: 'POST',
                    data: "{'routedQuestions':'" + routedQuestions + "','routingRule':'" + routingRule + "','routingValue':'" + routingValue + "','ParentID': '" + ParentID + "'}",
                    datatype: "json",
                    contentType: "application/json; charset=utf-8"
                    }

                });
            });

        });
    }

编辑:

看了一下之后,好像这样做了:

var questionList = [];
            var routedQuestions = $(this).find("#sortable2 li");
            routedQuestions.each(function (idx, li) {
                questionList.push($(this).attr('value'));
            });

这可能是一种肮脏的方式,但它确实有效。

1 个答案:

答案 0 :(得分:0)

如果您使用gridview,您应该尝试使用js中的Live()来使用gridview。