我正在使用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>
答案 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");
}
答案 2 :(得分:4)
试试这个:
update: function(e,ui) {
if (!ui.sender) {
//your code here
}
}