jquery ui可排序列表不跟踪列表项属性的更新
我正在处理一个列表,其项目既可以选择(使用复选框)又可以排序(使用 jquery 'sortable')。
该列表如下所示:
<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>
...并且 javascript 如下所示:
$(".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>
The Problem that I'm running进入的原因是可排序列表没有捕获此更改。当取消选中第二个项目,然后将其拖动到第一个项目之前的位置时,发布到服务器的订单字符串是“1291,1290”,而它应该是“0291,1290”。
我尝试在切换回调结束时以及可排序更新发布之前调用 $("#dragdrop").sortable("refresh")
和朋友,但没有骰子。
有什么想法吗?
I'm working with a list whose items are both selectable (using checkboxes) and sortable (using jquery 'sortable').
The list looks like this:
<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>
...and the javascript looks like this:
$(".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 () { });
}
});
So when the user un-checks the checkbox for, say, the second item (id=291), its list item changes to
<li id="0291" ... ></li>
The problem that I'm running into is that this change is not captured by the sortable list. When the second item is unchecked and then dragged to a position before the first item, the order string that's posted to the server is "1291,1290" when it should be "0291,1290".
I have tried calls to $("#dragdrop").sortable("refresh")
and friends both at the end of the toggle callback and also just before the sortable update post, but no dice.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不要使用“update”事件,而是尝试“stop”并连接您自己的排序变量。
希望这对你有用!
Instead of using the "update" event, try "stop" instead and concatenate your own sort var.
Hopefully that works for you!
因此,解决方案是根本不用理会可排序方法——只需直接从复选框中获取所需的属性即可:
So the solution is to not bother with the sortable methods at all--just grab the desired properties directly from the check boxes: