tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
334
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von para_noid
    para_noid para_noid ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    144
    Tach auch,

    Folgendes: ich verwende jQuery-UI für ein kleines Item-Slot-System.

    Angenommen, ich habe zehn leere Slots und drei Items, die ich je nach Laune innerhalb der Slots herumschieben kann.

    HTML-Code:
    <div class="slot ui-droppable">
      <div class="item yellowPo ui-draggable" style="position: relative;"></div>
      </div>
    <div class="slot ui-droppable">
      <div class="item bluePo ui-draggable" style="position: relative;"></div>
      </div>
    <div class="slot ui-droppable">
      <div class="item greenPo ui-draggable" style="position: relative;"></div>
      </div>
    <div class="slot ui-droppable"></div>
    <div class="slot ui-droppable"></div>
    <div class="slot ui-droppable"></div>
    <div class="slot ui-droppable"></div>
    <div class="slot ui-droppable"></div>
    <div class="slot ui-droppable"></div>
    <div class="slot ui-droppable"></div>
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    function initInventory() {
      $('.item').draggable({
         cursor: 'move',
         containment: 'document',
         revert: 'invalid',
         stack: '.item'
        });
      $('.slot').droppable({
         accept: '.item',
         hoverClass: 'hovered',
         drop: handleDropEvent
      });
    }
     
    function handleDropEvent(event, ui) {
      var draggable = ui.draggable;
        if($(draggable).hasClass("item")){
            draggable.position({of: $(this), at: 'center center'});
        }
    }

    Jetzt möchte ich verhindern, dass ich in einen Slot mehr als ein Item legen kann, und ich weiß nicht, wie. Mit dem geposteten Code kann ich alle drei Items übereinander in einen Slot legen.

    Ich kann zwar den verwendeten Slot für weitere Ablagen deaktivieren:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    function handleDropEvent(event, ui) {
      var draggable = ui.draggable;
        if($(draggable).hasClass("item")){
            draggable.position({of: $(this), at: 'center center'});
            $(this).droppable({disabled: true});
        }
    }

    aber finde keine Möglichkeit, ihn zu reaktivieren, wenn er wieder frei ist. Ein einmal benutzter Slot wird danach unbrauchbar. Wohin also mit einem
    Code :
    1
    
    $(this).droppable({disabled: false});
    ?
    Ich bräuchte eine Art gedropptes-Item-wurde-soeben-von-mir-entfernt-Event für die Slots.


    Jemand eine Idee?
     
    Für die Übereinstimmung von Niederschrift und Hirninhalt.

  2. #2
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Also ich geb zu ich hab wirklich wenig Verständniss für Javascript bisher (Habs bisher meist mit PHP lösen können).
    Ich würde auf den ersten Blick an ein else denken.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    function handleDropEvent(event, ui) {
      var draggable = ui.draggable;
        if($(draggable).hasClass("item")){
            draggable.position({of: $(this), at: 'center center'});
            $(this).droppable({disabled: true});
        }
        else {
            draggable.position({of: $(this), at: 'center center'});
            $(this).droppable({disabled: false});
        }
    }

    Wenn das Unsinn ist dann einfach ignorieren
     

  3. #3
    Avatar von para_noid
    para_noid para_noid ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    144
    Wenn das Unsinn ist dann einfach ignorieren
    Unsinn nicht, aber es funktioniert nicht
    Das Drop-Event wird ja bei jeder Ablage ausgelöst. Und abgelegt wird immer ein Element der Klasse item. Der else-Zweig würde also gar nicht durchlaufen.

    Ich brauche also entweder ein Event für die Droppables, dass beim Entfernen eines Draggebels feuert, oder eines für die Draggables, das beim oder nach dem erneuten Platzieren feuert.
    Das ständige Durchrödeln durch eine Schleife würd ich dabei gern vermeiden, sonst wärs' kein Problem.
     
    Für die Übereinstimmung von Niederschrift und Hirninhalt.

Ähnliche Themen

  1. Drag und Drop mit JQuery
    Von t90 im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 20.06.11, 21:20
  2. JQuery Listen sortieren/Drag/Drop?
    Von bernd00 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 12.10.10, 17:23
  3. [jQuery] Drag and Drop
    Von newwarrior im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 25.06.10, 11:56
  4. [jQuery] Drag & Drop & Img & Divs
    Von newwarrior im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 09.03.10, 23:40
  5. [jQuery] Drag and drop & event.pageY
    Von tobee im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 16.01.10, 22:07