我正在使用jQuery和Sortable来组合以下内容:
有两种情况我需要抓住:
有两种情况我需要抓住:
> A:移动同一列表中的项目
> B:将项目从一个列表移动到另一个列表
案例B仅在使用接收事件时解决.但是,如果我绑定收到和停止,他们也会从一个列表移动到另一个列表时被解雇.
这使得我不可能捕获案例A,因为我无法找出该项目是否从另一个列表或同一个列表中移除.希望有道理
这很奇怪,因为我会把我的用例看成是最常用的.
我渴望想法如果你想试试看,请参阅http://jsfiddle.net/39ZvN/5/.
HTML:
<div id="list-A"> <ul class="sortable"> <li>item 1</li> <li>item 2</li> <li>item 3</li> </ul> </div> <br /> <div id="list-B"> <ul class="sortable"> <li>item 4</li> <li>item 5</li> <li>item 6</li> </ul> </div>
JS:
$(function() { $('.sortable').sortable({ stop: function(event,ui) { // Wird auch aufgerufen wenn von Liste X nach Liste Y gezogen wird if(!ui.sender) alert("sender null"); else alert("sender not null"); },receive: function(event,ui) { // Funktioniert top,damit kann ich Fall B abfangen alert("Moved from another list"); },connectWith: ".sortable" }).disableSelection(); });
解决方法
这有趣地做了这个工作.我会认为取消将项目移动到其原始列表,但接收事件触发非常晚,并停止其他事件触发.希望这可以帮助.这个解决方案没有工作,但我很笨,看不到它.我删除了以前的代码,因为它是完整的废话.
这是一个使用多个事件跟踪状态的工作解决方案:
$(function() { var oldList,newList,item; $('.sortable').sortable({ start: function(event,ui) { item = ui.item; newList = oldList = ui.item.parent().parent(); },stop: function(event,ui) { alert("Moved " + item.text() + " from " + oldList.attr('id') + " to " + newList.attr('id')); },change: function(event,ui) { if(ui.sender) newList = ui.placeholder.parent().parent(); },connectWith: ".sortable" }).disableSelection(); });