2012-02-14 36 views
0

Im的模拟问题与this SO question一样。我有一个与overflow: scroll与可滴入里面的div。如果一个可拖动的区域落在div下面,则可触发区域仍然会触发。该问题的解决方案确实可以防止这种情况发生。不过,我还有另一个div,在我的第一个div下面有droppables。这个解决方案也阻止我放弃第二次投资。在禁用后启用droppble

所以我不得不稍微修改一下,而不是把检查放在drop事件上,我把它放在droppable上的over事件上。如果可以隐藏,我禁用它。这使得第二个droppable工作,但林无法重新启用droppable供将来使用。我试图使用droppable事件,但我想它也会被禁用,当我禁用droppable时,因为它没有触发。如何在禁用后启用droppable?还是有更好的方法来做到这一点?

$('.droppable').droppable({    
     over: function(event, ui) { 
      var myOverflowObj = $(this).closest(".module, #process-window"); 

      if (myOverflowObj.length) { 

       var cTop = myOverflowObj.position().top + parseInt(myOverflowObj.css("margin-top")); 
       var cBtm = myOverflowObj.position().top + parseInt(myOverflowObj.css("margin-top")) + myOverflowObj.height(); 
       var dTop = $(this).position().top + parseInt($(this).css("margin-top")); 
       var dBtm = $(this).position().top + parseInt($(this).css("margin-top")) + $(this).height(); 

       if ((dBtm > cTop && dTop < cBtm) == false) { 
        $(this).droppable("option", "disabled", true); 
       } 
      } 
     }, 
     out: function(event, ui) { 
      $(this).droppable("option", "disabled", false);   
     } 
}); 

回答

0

我设法做一个变通,用可拖动对象的停止时重新启用已被禁用的droppables。

$('.draggable').draggable({  
    stop: function() { 
     $.each($('.droppable.ui-state-disabled'), function(index, value) { 
      $(this).droppable("option", "disabled", false);  
     }); 
    }   
});