jQuery droppable draggable删除DnD不止一个

时间:2012-01-28 01:38:15

标签: jquery drag-and-drop draggable droppable

我之前发布了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”就会出现!!!

谁能解释我,并给出一个解决方案?

1 个答案:

答案 0 :(得分:0)

每次将元素拖动到放置区域时,都会将单击处理程序附加到该放置区域。这些点击处理程序永远不会被删除,因此除了添加新的点击处理程序之外,它们仍保留在该区域上。添加和删​​除元素的次数越多,绑定的点击处理程序就越多。

在不更改代码的情况下解决此问题的最简单方法是将click更改为oneone允许您附加一个只执行一次的处理程序。

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”锚点时,处理程序也将被删除。