1

​​演示我的问题。请注意,当您将一个框拖出其父项并将其带回父项时,父项将接受该元素。当孩子被拖拽时,我需要让父母的droppable'被禁用。然后我需要在孩子被丢弃后重新启用droppable'。在从父级拖动时禁用父级droppable框

我尝试使用start:和stop:droppable方法,但是,获取正确的元素以禁用/重新启用是棘手的,kludgy,并且不管用。

这里是我与可投放处理器尝试的例子:

$('<fieldset />', 
{ 
    id: login, 
    level: self.levelValue, 
    class: 'member ' + employeeClass, 
}).appendTo('#columnWrapDiv') 
    .droppable(
    { 
     hoverClass: 'hovered', 
     drop: function(event,ui) { /* removed */}); 

而且我可拖动:

$('.class') 
    .draggable(
    { 
     containment: '#ttkanbanDiv', 
     cursor: 'crosshairs', 
     revert: true, 
     opacity: 0.4, 
     start: 
     function(ui) 
     { 
      var id = $($($(ui).attr('srcElement')) 
         .parents() 
         .find('.ui-droppable')[0]).attr('id'); 
      $('#' + id).removeClass('ui-droppable'); 
     }, 
     stop: 
     function(ui) 
     { 
      $($($(ui).attr('srcElement')) 
       .parents() 
       .find('.ui-droppable')[0]) 
       .addClass('ui-droppable'); 
     }, 
     zindex: 'auto', 
    }); 

回答

2

而且修复:http://jsfiddle.net/xSQBw/1/

具体的代码,使得它工作(感谢irc.freenode.net上的Shoky#jquery):

$('#unassignedDiv,.member').droppable({ 
    hoverClass: 'hovered', 
    accept: function(draggable) { 
     draggable = draggable[0]; 
     var droppable = this; 
     return !$.contains(droppable, draggable); 
    }, 
    drop: ...