我有以下问题。我有一个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'));
});
这可能是一种肮脏的方式,但它确实有效。
答案 0 :(得分:0)
如果您使用gridview,您应该尝试使用js中的Live()
来使用gridview。