Jquery ui 将项目移动到新的可排序列表:如何引用我正在将元素拖放到的列表?
我有两个可排序的列表链接在一起 我在第一个列表上有一个事件侦听器,在“sortupdate”上调用函数“A”,以便在对列表中的项目进行排序或从另一个列表接收项目时执行一些功能 我在第二个列表中还有一个事件侦听器,它在“sortreceive”中调用函数“B”,以便在从另一个列表接收到一个项目时执行一些功能 我的问题是,每当我将某些内容从列表1移动到列表2时,函数“A”也会被调用,从而导致代码中出现错误。我想在函数“A”的开头添加一个“if”子句,表示仅当第一个列表是目标时才运行此代码,但我一辈子都不知道如何引用目标 或者也许有更好的方法来检查某个项目是否已从列表中拖出 /*添加当前代码*/Jquery ui 将项目移动到新的可排序列表:如何引用我正在将元素拖放到的列表?,jquery-ui,jquery-ui-sortable,Jquery Ui,Jquery Ui Sortable,我有两个可排序的列表链接在一起 我在第一个列表上有一个事件侦听器,在“sortupdate”上调用函数“A”,以便在对列表中的项目进行排序或从另一个列表接收项目时执行一些功能 我在第二个列表中还有一个事件侦听器,它在“sortreceive”中调用函数“B”,以便在从另一个列表接收到一个项目时执行一些功能 我的问题是,每当我将某些内容从列表1移动到列表2时,函数“A”也会被调用,从而导致代码中出现错误。我想在函数“A”的开头添加一个“if”子句,表示仅当第一个列表是目标时才运行此代码,但我一辈子
$("#divMainMenu").bind("sortupdate", function(event, ui)
{ dropRootCategory(event,ui);})//when the main menu receives a menu item
$("ul.divSubMenu ").bind("sortreceive", function(event, ui)
{ dropSubMenu(event, ui);})//when the main submenu receives a menu item
function dropRootCategory(event, ui)
{/*item dropped on root category*/
//do some different stuff
}
function dropSubCategory(event, ui)
{//item dropped on a sub submenu
//do some stuff
}
我已尝试检查目标:
if (event.target.id == 'divMainMenu') { //
这不起作用,因为目标id保持为“divMainMenu”,无论我在哪里
接下来,我尝试检查发件人:
if (ui.sender == 'null'){//
但是,它只在通过sortupdate阶段并进入sortreceive后填充任何信息,因此它再次触发代码运行
/*******更新了答案
根据Keith下面的想法,我用以下代码回答了这个问题:
在启动菜单时,我添加了一个保持主菜单原始长度的变量
var numMenuItems = $('#divMainMenu').children().length;
那么对于我的if声明:
if ($('#divMainMenu').children().length >= numMenuItems){
//do some stuff
}
再次感谢基思!我在这一点上疯了:)您可以根据可排序的文档尝试使用
ui.sender
:
“ui.sender-项目来源的可排序列表(仅当您从一个连接的列表移动到另一个连接的列表时才存在)”
这看起来像你要找的。好的,我确实找到了另一个答案。
通过在定义可排序表时向开始事件添加标志,以及向停止事件添加函数调用:
$('ul.divSortable').sortable({
items: "li:not(.liEdit)", //cancel: ".liEdit",
connectWith: '.divSortable',
start: function(event, ui) { setOriginalSub(ui); },
stop: function(event, ui) { isBeingSorted = false; sortSorter(event, ui); }
});
以及在进行排序之前获取id的函数:
function setOriginalSub(ui)
{
originalSub = $(ui.item[0]).parent().attr('id');
}
我现在可以比较原始ID和当前ID
function sortSorter(event, ui){
var parentID = $(ui.item[0]).parent().attr('id');
}
太棒了,没有基思的帮助我是不会想到的 我一直在寻找同样的东西,并在这里找到了适合我的解决方案(所有这一切都归功于phpduck,我只找到了这个)
$(函数(){
var旧列表、新列表、项目;
$(“.categories可排序”).sortable({
connectWith:$(“.categories sortable”),
开始:功能(事件、用户界面){
item=ui.item;
newList=oldList=ui.item.parent();
},
停止:功能(事件、用户界面){
console.log(“已将“+item.text()+”从“+oldList.attr('id')+”移动到“+newList.attr('id')”);
},
更改:功能(事件、用户界面){
console.log(ui.sender);
if(ui.sender){
newList=ui.placeholder.parent();
}
},
})
.disableSelection();
});代码>我们可以看看你到目前为止尝试了什么吗?只是更新了一些更多的信息。谢谢Keith。我尝试了if(ui.sender==“null”){//这只在经过sortupdate阶段并进入sortreceive后填充了任何信息,因此再次触发代码运行。我明白您的意思。您可以采取不同的方法,检查DivMain菜单中已排序元素的计数是否已更改。如果已更改(即减少1)然后你知道该元素已从列表中删除并放在子菜单中。太棒了,基思!这完全有效!我马上发布我的代码。谢谢!