1

链接到 jsFiddle: http: //jsfiddle.net/k8wYF/1/ (工作)

var count;
$("#sortable").sortable({
    start : function(){
               count = 0;
            },
    change : function(){
                 count++;                
            },
    stop : function(){
                 alert(count);          
            }
});
$("#sortable").disableSelection();​

单次更改

count : 1

但是,我想在 sortableStart 上刷新可排序

链接到 jsFiddle: http: //jsfiddle.net/k8wYF/ (不工作)

var count;
$("#sortable").sortable({
    start : function(){
               $("#sortable").sortable("refresh");       //refresh sortable
               count = 0;
            },
    change : function(){
                 count++;                
            },
    stop : function(){
                 alert(count);          
            }
});
$("#sortable").disableSelection();​

然后,单次更改

count : 16  (multiple times)
4

2 回答 2

4

文档

改变

此事件在排序期间触发,但仅在 DOM 位置发生更改时触发。

刷新

刷新可排序的项目。自定义触发所有可排序项目的重新加载,从而识别新项目。

你所经历的是正常的。刷新时,所有项目都移动到预期的位置,改变了 DOM,因此每次都会触发 changed 事件。

如果要向更改事件添加代码,请确保它是您要在每次更改时执行的代码。

如果要添加仅在排序完成时执行的代码,请将其添加到stopupdate

更新

当用户停止排序并且 DOM 位置发生变化时触发此事件。

停止

当排序停止时触发此事件。

根据您的代码将执行的操作,请确保将其添加到适当的事件中。

于 2012-09-20T10:46:08.533 回答
2

每次元素更改时似乎都会触发更改,因此列表中每个移动的 li 都会增加一个增量。我将它切换为更新并取出刷新,它似乎给出了正确的计数。

var count = 0;

$("#sortable").sortable({
    stop : function(){
                 alert(count);          
    },
    update : function(){
                 count++;  
    }
});

$("#sortable").disableSelection();

您也可以重新进行刷新,只是不要每次都将计数重置为 0,而且它似乎可以很好地跟踪。虽然,如果没有更多关于你想要什么的信息,我真的无能为力。

于 2012-09-20T10:42:55.687 回答