我之前发布了DnD的一个问题,现在已经解决但在测试过程中我发现其他代码中存在错误:“删除”操作。
我确信这是完全合乎逻辑的,我错过了对它的合理解释,但我在互联网上找不到任何答案,但在DnD难以触及的书中也找不到答案。
问题在于,当一个droppable被定位为多个(> 1)droppable时,它将导致在对其进行REMOVE时先前丢弃的ALL返回。
自己动手:http://jsfiddle.net/BCnyU/
请按照以下步骤操作:
1)“拖3”上的“拖2” 2)“拖4”上的“拖1” 3)“拖5”上的“拖4” 没什么特别的,只是为了让它们脱离我们的路 现在这样做:
4)“拖1”上的“拖3” 5)点击“拖动3”的“撤消” 6)“drop 1”上的“拖5” 7)“拖2”上的“拖3”
我们在“drop 1”上发生了两(2)次掉落事件 当您现在点击“拖动5”的“撤消”时,您可能会期望“拖动5”仅返回 但不,不......“拖5”和“拖3”就会出现!!!
谁能解释我,并给出一个解决方案?
答案 0 :(得分:0)
每次将元素拖动到放置区域时,都会将单击处理程序附加到该放置区域。这些点击处理程序永远不会被删除,因此除了添加新的点击处理程序之外,它们仍保留在该区域上。添加和删除元素的次数越多,绑定的点击处理程序就越多。
在不更改代码的情况下解决此问题的最简单方法是将click
更改为one
。 one
允许您附加一个只执行一次的处理程序。
http://jsfiddle.net/BCnyU/101/
.one("click",function(){
$(ui.draggable).show();
$(this).css("color","black");
$(this).text(oldvalue);
$(this).droppable({disabled:false});
$(this).removeClass('OK NOK');
var numItems = $('.OK').length;
$('.counter').html('Correct: '+numItems +'/5');
});
另一种选择是将点击处理程序添加到“UNDO”锚标记,而不是整个删除区域。然后,当删除“UNDO”锚点时,处理程序也将被删除。