jquery ui可排序列表不跟踪列表项属性的更新
我正在处理一个列表,它的项既可以选择(使用复选框)也可以排序(使用jquery'sortable') 列表如下所示:jquery ui可排序列表不跟踪列表项属性的更新,jquery,ajax,jquery-ui-sortable,Jquery,Ajax,Jquery Ui Sortable,我正在处理一个列表,它的项既可以选择(使用复选框)也可以排序(使用jquery'sortable') 列表如下所示: <ul id="dragdrop"> <li id="1290"><input type="checkbox" id="290" checked class="slideToggle" /><img ... /></li> <li id="1291"><input type="check
<ul id="dragdrop">
<li id="1290"><input type="checkbox" id="290" checked class="slideToggle" /><img ... /></li>
<li id="1291"><input type="checkbox" id="291" checked class="slideToggle" /><img ... /></li>
</ul>
$(".slideToggle").click(function () {
var slideId = $(this).attr("id");
var checked = $(this).attr("checked");
if (slideId) {
$.post("ToggleInclusion", { "slideId": slideId, "isChecked": checked },
function () {
var newId = checked ? "1" : "0" + slideId;
$(this).parent().attr("id", newId);
});
}
});
$("#dragdrop").sortable({
update: function() {
var order = $(this).sortable("toArray").toString();
$.post("UpdateOrder", { "order": order }, function () { });
}
});
因此,当用户取消选中第二项(id=291)的复选框时,其列表项将更改为
<li id="0291" ... ></li>
李>
我遇到的问题是,这个更改没有被可排序列表捕获。如果取消选中第二个项目,然后将其拖到第一个项目之前的位置,则发送到服务器的订单字符串应为“02911290”,而其应为“12911290”
我试过在切换回调结束时和可排序更新帖子之前调用$(“#dragdrop”).sortable(“refresh”)
和朋友,但没有骰子
有什么想法吗 不要使用“更新”事件,而是尝试使用“停止”并连接您自己的排序变量
$("#dragdrop").sortable({
stop: function() {
var order = "";
$("#dragdrop").find("tr").each(function() {
order = order + $(this).attr("id") + ",";
});
if(order.length > 0) order = order.substr(0, order.length - 1); // remove the last comma
$.post("UpdateOrder", { "order": order }, function () { });
}
});
希望这对你有用 因此,解决方案是根本不必考虑可排序的方法——只需直接从复选框中获取所需的属性:
$(".slideToggle").click(function () {
var slideId = $(this).attr("id");
var checked = $(this).attr("checked");
if (slideId) {
$.post("ToggleInclusion", { "slideId": slideId, "isChecked": checked },
function () { });
}
});
$("#dragdrop").sortable({
update: function() {
var order = $(".slideToggle").map(function() {
return ($(this).attr("checked") ? "1" : "0" + $(this).attr("id");
}).get().join(",");
$.post("UpdateOrder", { "order": order }, function () { });
}
});
谢谢,但不幸的是那不行。停止事件的使用和手动连接都不会捕获更新的id属性。我真的很惊讶做
$('dragdrop li')。每个(…
没有选择正确的id值。我想我遗漏了一些更基本的东西,比如可能只有当页面加载时列表项的属性才会被缓存,因此在加载之后无法更新?当我取消选中某些框并刷新页面,然后重新排序时,更新的属性会被删除你捡起来很好。