JQuery UI可排序在接收之前禁用更新功能

时间:2011-04-07 19:33:51

标签: jquery jquery-ui jquery-ui-sortable

我正在使用jquery ui来处理您可以在其中排序的列表,然后在另一个列表之间进行排序。我正在使用更新进行排序,并且工作正常。当我在中间排序时,我只想调用接收函数而不是更新。目前,更新被调用,然后接收被调用。在列表之间进行排序时有没有办法跳过更新调用?

<script>
            $ = jQuery
            $(function() {
                $( "#sortable1).sortable({
                    connectWith: ".connectedSortable",
                    placeholder: "ui-state-highlight",
                    update: function(event, ui) {processSortWithin(ui.item.attr("id"), ui.item.index()); },
                    receive: function(event, ui){ 
                        processSortBetween(ui.item.attr("id"), ui.item.index(),ui.sender.attr("id"));
                    }
                }).disableSelection();
            });

        </script>

3 个答案:

答案 0 :(得分:13)

回答:http://forum.jquery.com/topic/sortables-update-callback-and-connectwith

update: function(e,ui) {
    if (this === ui.item.parent()[0]) {
        //your code here
    }
}

答案 1 :(得分:4)

我今天遇到了类似的问题,我找到的唯一解决方案是引入一个在 update 事件期间设置的标志变量,并在 stop 事件期间进行检查。< / p>

在您的示例中,您使用 receive 事件,该事件将在从其他列表中接收新元素的列表上触发,因此应在$(".connectedSortable").sortable()个选项中设置。

这是我区分是否排序(在一个列表中,在停止中处理)或移动(在两个列表之间,在接收中处理)的方式:

$(function() {
    position_updated = false; //helper flag for sortable below

    $(".sortable").sortable({
        connectWith: ".sortable",
        update: function(event, ui) {
            position_updated = !ui.sender; //if no sender, set sortWithin flag to true
        },
        stop: function(event, ui) {
            if (position_updated) {
                processSortWithin(ui.item.attr("id"), ui.item.index());
                position_updated = false;
            }
        },
        receive: function(event, ui) {
            processSortBetween(ui.item.attr("id"), ui.item.index(),ui.sender.attr("id"));
        }
    }).disableSelection();
});

function processSortWithin(id, position) {
    alert("sort within");
}

function processSortBetween(id, position, sender_id) {
    alert("sort between");
}

工作示例:http://jsfiddle.net/myLff/2/

答案 2 :(得分:4)

试试这个:

update: function(e,ui) {
   if (!ui.sender) {
       //your code here
   }
}