1

我似乎无法处理我的可排序列表。它们是列表元素的列表,每个元素都有一个

形成内部,我需要从中获取值。

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));
                }
            }
        }
    });

然后将可排序列表添加到循环中的列表中sort.addItems(li);。但是当我尝试在可排序的 onComplete 声明之外获取可排序时,js 说 this.list 是未定义的。


从另一个角度解决问题:

尝试遍历 DOM 会给我同样奇怪的结果。以下是一些代码的萤火虫控制台结果:

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]返回未定义的对象。

感谢您的任何帮助!

4

1 回答 1

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")));
    }
});
于 2010-02-23T11:54:07.627 回答