我似乎无法处理可排序列表。它们是列表元素的列表,每个元素都带有
形成内部,我需要从中获取值。
Sortables.implement({
serialize: function(){
var serial = [];
this.list.getChildren().each(function(el, i){
serial[i] = el.getProperty('id');
}, this);
return serial;
}
});
var sort = new Sortables('.teams', {
handle: '.drag-handle',
clone: true,
onStart: function(el) {
el.fade('hide');
},
onComplete: function(el) {
//go go gadget go
order = this.serialize();
alert(order);
for(var i=0; i<order.length;i++) {
if (order[i]) {
//alert(order[i].substr(5, order[i].length));
}
}
}
});
然后将sortables列表添加到包含sort.addItems(li);
的循环中的列表中。但是当我尝试在sortables onComplete声明之外得到sortables时,js说this.list是未定义的。
从另一个角度解决问题:
尝试遍历DOM会给我同样奇怪的结果。以下是一些代码的firebug控制台结果:
var a = document.getElementById('teams').childNodes;
var b = document.getElementById('teams').childNodes.length;
try {
console.log('myVar: ', a);
console.log('myVar.length: ', b);
} catch(e) {
alert("error logging");
}
将一个li元素硬编码到HTML中(而不是通过JS注入)会改变长度== 1,并允许我访问该单个元素,这让我相信通过DOM访问注入的元素是问题(对于这种方法)
尝试使用document.getElementById('teams').childNodes[i]
获取对象返回undefined。
谢谢你的帮助!
答案 0 :(得分:1)
不确定为什么会失败,我尝试了几种方式而且一切正常
http://www.jsfiddle.net/M7zLG/测试用例以及html标记
这是适用于本地引用的源代码,使用本机内置的.serialize方法以及一个自定义的方法来遍历dom并获取自定义属性rel,它可以是新订单中的数据库ID(我倾向于这样做)
var order = []; // global
var sort = new Sortables('.teams', {
handle: '.drag-handle',
clone: true,
onStart: function(el) {
el.fade('hide');
},
onComplete: function(el) {
//go go gadget go
order = this.serialize();
}
});
var mySerialize = function(parentEl) {
var myIds = [];
parentEl.getElements("li").each(function(el) {
myIds.push(el.get("rel"));
});
return myIds;
};
$("saveorder").addEvents({
click: function() {
console.log(sort.serialize());
console.log(order);
console.log(mySerialize($("teams")));
}
});