我已经成功实现了JQuery Sortable。我也可以使用单独的调用将其写入数据库。但是,这仅适用于受影响的第一组匹配类。第二个,我认为如果有的话,我认为不起作用。
<ul class="grouped-articles-list">
<li id="4weight10"></li>
<li id="3weight20"></li>
<li id="2weight30"></li>
</ul>
<ul class="grouped-articles-list>
<li id="5weight50"></li>
<li id="6weight60"></li>
<li id="22weight70"></li>
<li id="18weight80"></li>
</ul>
我有多个UL共享一个共同的类。视觉方面都可以正常工作,完全可以排序。然后我将对象写入一个数组,Array = $(“.grouped-articles-list”)。sortable('toArray')然后调用ajax函数。如果我执行trace / console.log,它只会返回上一个(第一个)类的对象。
是否可以多次使用Classes并仍然可以使用ToArray?在这种情况下,如果我影响第二个UL并进行了追踪,它仍会返回[“4weight10”,“3weight20”,“2weight30”]。
我会在下面粘贴我的代码,但它有点冗长......
function makeSortable(){
var before;
var weight;
var newWeight = [];
var newID = [];
$(".grouped-articles-list").sortable({
tolerance: 'pointer',
items: "li:not(.sortable_disabled)",
start: function(event, ui){
newWeight.length = 0;
var resultbefore = $(".grouped-articles-list").sortable('toArray');
before = resultbefore;
//goes through each item and saves their weight to an array
$.each(before, function(i) {
newWeight.push(splitWeightFromId(before[i])[3]);
});
},
stop: function(event, ui) {
newID.length = 0;
var after = $(".grouped-articles-list").sortable('toArray');
$.each(after, function(i) {
//goes through each item in the array and saves out their id
newID.push(splitWeightFromId(after[i])[1]);
// Only adds changed items
if (newID[i] !== splitWeightFromId(before[i])[1]){
//as the items move, but the weights stay the same
//sends the affected ID with the always stationary weight off
change_weight( newID[i], newWeight[i] )
}
});
});
Ajax功能
function change_weight( link_id, new_weight ) {
$.ajax({
type: "PUT",
url: "/article_relationships/" + link_id,
data: {article_relationship : {
weight : new_weight
} },
datatype: "js",
remote: "true"
});
}
感谢您的时间,
任何提示,提示或建议都非常受欢迎。
答案 0 :(得分:1)
我设法解决这个问题,可能是一个更好的方法,但创建一个数组,并为每个项目进行处理工作正常。
sortableArray = ($('.grouped-articles-list'));
$(sortableArray).each(function(index){
$(sortableArray[index]).sortable({
tolerance: 'pointer',
items: "li:not(.sortable_disabled)",
start: function(event, ui){
newWeight.length = 0; var resultbefore = $(sortableArray[index]).sortable('toArray');