1

J'ai créé un jeu de glisser-déposer pour commencer à m'enseigner jquery. Tout semble fonctionner mais vous pouvez déposer plus d'un objet sur le même carré. Je veux désactiver droppable si l'espace réservé contient une image.Désactiver drop si div a déjà été supprimé?

J'ai regardé dans:

`greedy: true` 

qui désactive la chute mais je ne suis pas sûr comment l'activer à nouveau et aussi:

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

Je peux obtenir ces deux pour désactiver la Laisser tomber, mais je ne sais pas comment je les obtenir pour l'activer à nouveau si le bloc/image revient à sa position d'origine ou est déplacé vers un autre carré.

Version complète: http://creativelabel.co.uk/drag-and-drop/

MISE À JOUR: Voici le code pour les machines à sous largables.

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 
}); 

C'est drop: code d'événement:

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); 
     } 
    } 

Le code 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); 
    } 
} 

Répondre

5

Le docs (Regardez sous l'onglet "méthodes") indiquent que pour vous désactiver l'utilisation:

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

Et pour vous permettre d'utiliser

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

Mise à jour: Vérifiez cet exemple en direct: http://jsfiddle.net/QqJRs/ Faites glisser l'un des carrés rouges à la grande boîte et déposez-le (il devient vert pour indiquer son chuté). Vous ne pouvez pas laisser tomber les autres dans cette case pendant que vous êtes à l'intérieur. Maintenant faites glisser celui-là (il revient en rouge pour indiquer son enlevé). Maintenant vous pouvez laisser tomber n'importe lequel des autres à sa place. Le point crucial de ceci est comme je l'ai décrit dans mon commentaire ci-dessous; lorsque vous déposez un élément dans un conteneur associer le conteneur à l'article:

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 
} 

Puis, quand vous le faites glisser à nouveau, unassociate et réactivez:

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

Eh bien, car vous n'avez pas posté n'importe quel code (Et non, je ne passe pas en revue votre base de code entière dans votre lien) il est un peu difficile de commenter où placer ceci dans votre code. Essayez d'affiner où vous * pensez * vous devriez activer le 'droppable' et mettre à jour votre question avec les sections de code pertinentes – Jamiec

+0

Ok J'ai mis à jour ma question quant à l'endroit où je pense que l'activation devrait aller. Le code d'activation prend un hors du score si l'utilisateur traîne un carré sur un autre alors pour moi cela semble être un endroit logique pour mettre le code d'activation? – ShambalaG

+0

Et avez-vous essayé cela? Qu'est-il arrivé? – Jamiec

Questions connexes