1

我創建了一個拖放遊戲,以開始自學jquery。一切似乎都在工作,但你可以將多個物品放在同一個方格上。如果佔位符中有一個圖像,我想禁用可丟棄。如果div已被刪除,禁用刪除操作?

我已經研究過:

`greedy: true` 

禁用的下降,但我不知道再怎麼也啓用:

$(this).droppable('disable'); 

我可以得到這些都禁用但不知道如何讓他們再次啓用它,如果塊/圖像恢復到原來的位置或移動到另一個廣場。

完整版: http://creativelabel.co.uk/drag-and-drop/

UPDATE: 這是可放開插槽的代碼。

for (var i=0; i<=19; i++) { 
    var images = 'images/slot' + slotNumbers[i] + '.jpg'; 
$('<div class="placeholder"><div class="img-slot"></div></div>').attr('id', 'slot'+slotNumbers[i]).data('slotNumbers', slotNumbers[i]).appendTo('#imgSlots').droppable({ 
     accept: '#images img', 
     hoverClass: 'hovered', 
     drop: handleDropEvent, 
     activate: handleDragEvent 
}); 

這是drop:事件代碼:

function handleDropEvent(event, ui) { 
    var slotNumber = $(this).data('slotNumbers'); 
    var imgNumber = ui.draggable.data('number'); 
    ui.draggable.addClass('dropped'); 
    $(this).droppable('disable'); 
    ui.draggable.position({ of: $(this), my: 'right top', at: 'right top' }); 

    if (slotNumber == imgNumber) { 
    ui.draggable.addClass('img-match'); 
    ui.draggable.data("valid", true); 

    imgMatch++; 
    } else { 
     if(ui.draggable.data("valid")) { 
     imgMatch--; 
     ui.draggable.data("valid", false); 
     } 
    } 

activate:代碼:

function handleDragEvent(event, ui) { 
    $(this).droppable('enable'); 
    if(ui.draggable.data("valid")) { 
     imgMatch--; 
     $('input[name=Score]').val(imgMatch); 
     $('#score h1').text(imgMatch); 
     ui.draggable.data("valid", false); 
    } 
} 

回答

5

docs(請看 「方法」 選項卡下)表明禁用使用:

$(this).droppable('disable'); 

並讓您使用

$(this).droppable('enable'); 

更新:選中此活生生的例子:http://jsfiddle.net/QqJRs/ 將一個紅色的正方形的大盒子,並把它(它變成綠色,指示其丟棄)。當其中一個在裏面時,你不能把其他任何人放到這個盒子裏。 現在將其拖出(它會變回紅色以指示其被移除)。現在你可以放下任何其他的東西了。

這個問題的關鍵是我在下面的評論中描述的;當你把一個容器中的一項的容器與該項關聯:那麼當你再次拖動它,

drop: function(event,ui){ 
    ui.draggable.addClass('dropped'); // taken from your code & I used to change color 

    ui.draggable.data('droppedin',$(this)); // associate the container 
    $(this).droppable('disable'); // disable the droppable 
} 

未關聯,並重新啓用:

drag: function(event,ui){ 
     if($(this).data('droppedin')){ 
      $(this).data('droppedin').droppable('enable'); v// re-enable 
      $(this).data('droppedin',null); // de-associate 
      $(this).removeClass('dropped') // remove class 
     } 
    } 
+0

嘛,看到你還沒有發佈任何代碼(不,我不通過你的鏈接中的整個代碼庫進行篩選)有點難以評論將代碼放在哪裏。嘗試縮小你認爲的地方*你應該啓用'droppable'並用相關的代碼部分更新你的問題 – Jamiec

+0

好吧我已經更新了我的問題,我認爲啓用應該去哪裏。如果用戶將一個正方形拖到另一個正方形上,那麼激活代碼會取得一個分數,這對於我來說似乎是放置啓用代碼的合理位置? – ShambalaG

+0

你試過嗎?發生了什麼? – Jamiec