2015-04-15 12 views
5

Witajcie moi stackoverflow przyjaciele. Mam dziś pewne problemy i potrzebuję twojej pomocy, aby je rozwiązać. Jeśli możesz w czymkolwiek pomóc, byłoby to bardzo cenne! Ponieważ naprawdę muszę dokończyć ten projekt.

JSFiddle: https://jsfiddle.net/rdxmmobe/1/

Jest to scenariusz:Przeciąganie i upuszczanie problemów z pozycjonowaniem + aktualizowanie identyfikatora

<script type="text/javascript"> 
$(function(){ 
$(".DraggedItem").draggable({ 
     helper:'clone', 
     cursor:'move', 
     opacity: 0.7 
}); 

$('#rang1').droppable({ 
    drop: function(ev, ui) { 
     $('#rang1input').val($(ui.draggable).attr('id')); 
     var dropped = ui.draggable; 
     var droppedOn = $(this); 
     $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn); 
    } 
}); 

$('#rang2').droppable({ 
    drop: function(ev, ui) { 
     $('#rang2input').val($(ui.draggable).attr('id')); 
     var dropped = ui.draggable; 
     var droppedOn = $(this); 
     $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn); 
    } 
}); 

$('#rang3').droppable({ 
    drop: function(ev, ui) { 
     $('#rang3input').val($(ui.draggable).attr('id')); 
     var dropped = ui.draggable; 
     var droppedOn = $(this); 
     $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn); 
    } 
}); 

$('#rang4').droppable({ 
    drop: function(ev, ui) { 
     $('#rang4input').val($(ui.draggable).attr('id')); 
     var dropped = ui.draggable; 
     var droppedOn = $(this); 
     $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn); 
    } 
}); 

$('#rang5').droppable({ 
    drop: function(ev, ui) { 
     $('#rang5input').val($(ui.draggable).attr('id')); 
     var dropped = ui.draggable; 
     var droppedOn = $(this); 
     $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn); 
    } 
}); 

$('#rang6').droppable({ 
    drop: function(ev, ui) { 
     $('#rang6input').val($(ui.draggable).attr('id')); 
     var dropped = ui.draggable; 
     var droppedOn = $(this); 
     $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn); 
    } 
}); 

$('#rang7').droppable({ 
    drop: function(ev, ui) { 
     $('#rang7input').val($(ui.draggable).attr('id')); 
     var dropped = ui.draggable; 
     var droppedOn = $(this); 
     $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn); 
    } 
}); 
}); 
</script> 


Są to 7 DIV droppable (gdzie można upuścić obrazy):

<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="POST"> 
<input type="hidden" value="<?php echo $row["IDBewoner"] ?>" name="bewoner"> 
<td> 
    <div id="rang1"></div> 
    <input type="hidden" value="" id="rang1input" name="rang1value"> 
</td> 
<td> 
    <div id="rang2"></div> 
    <input type="hidden" value="" id="rang2input" name="rang2value"> 
</td> 
<td> 
    <div id="rang3"></div> 
    <input type="hidden" value="" id="rang3input" name="rang3value"> 
</td> 
<td> 
    <div id="rang4"></div> 
    <input type="hidden" value="" id="rang4input" name="rang4value"> 
</td> 
<td> 
    <div id="rang5"></div> 
    <input type="hidden" value="" id="rang5input" name="rang5value"> 
</td> 
<td> 
    <div id="rang6"></div> 
    <input type="hidden" value="" id="rang6input" name="rang6value"> 
</td> 
<td> 
    <div id="rang7"></div> 
    <input type="hidden" value="" id="rang7input" name="rang7value"> 
</td> 
<input type="submit" value="Save"> 
</form> 


I są to przeciągalne obrazy (obrazy, które można przeciągnąć), które pochodzą z fr om bazie danych i mają id różne to:

<td> <?php echo "<img class='DraggedItem' id='".$row["IDPictogram"]."' src='data:image/jpeg;base64,".base64_encode($row['Pictogram'])."' width='90' height='90' draggable='true'>"; ?> </td> 


Jest to kod php:

if($_SERVER["REQUEST_METHOD"] == "POST") { 
$rang1 = $_POST["rang1value"]; 
$rang2 = $_POST["rang2value"]; 
$rang3 = $_POST["rang3value"]; 
$rang4 = $_POST["rang4value"]; 
$rang5 = $_POST["rang5value"]; 
$rang6 = $_POST["rang6value"]; 
$rang7 = $_POST["rang7value"]; 
$bewonerID = $_POST["bewoner"]; 

echo "<script>alert('Rang1: $rang1')</script>"; 
echo "<script>alert('Rang2: $rang2')</script>"; 
echo "<script>alert('Rang3: $rang3')</script>"; 
echo "<script>alert('Rang4: $rang4')</script>"; 
echo "<script>alert('Rang5: $rang5')</script>"; 
echo "<script>alert('Rang6: $rang6')</script>"; 
echo "<script>alert('Rang7: $rang7')</script>"; 
} 


Pierwszy problem: Jak widać w moim skrypcie powyżej użyłem " helper: "klon", ale obrazy
z klasą ".DraggedItem" są przenoszone i nie o to chodzi. Obrazy powinny zostać przeniesione i zastąpione przez 7 elementów div. Ale oni mają być sklonowane z oryginalnej listy (więc mogę korzystać z tego samego ikonę dwukrotnie np)

Drugi problem: mam ukryte wejście do każdego div i muszą zawierać id
spadła obrazu więc mogę wstawić je do bazy danych. Powiedzmy, że upuściłem obraz Div1 (# rang1), a następnie przeniosłem obraz do Div4 (# rang4), id obrazu pozostaje na ukrytym wejściu Div1 i nie zostaje usunięty/zaktualizowany. Jak mogę się upewnić, że identyfikator zostanie również zaktualizowany po upuszczeniu nowego obrazu na div?
Trzeci problem: Jak mogę sprawdzić, kiedy upuszczam obraz z głównej listy, że jeśli jest już obraz, stary obraz zostanie usunięty i zastąpiony przez nowy?
enter image description here

czwarte Problem:, co jest najlepszym sposobem, aby przełączać się między 2 zdjęcia?
enter image description here


Jeśli możesz mi pomóc z któregokolwiek z tych problemów to mogłoby być znacznie ceniona !! Nie mogę pójść dalej bez rozwiązania tych problemów i naprawdę potrzebuję pomocy ekspertów.

+0

Budowanie jsFiddle przetestować. Chcesz przeciągnąć i upuścić klon do jednego z 7 miejsc? http://jqueryui.com/draggable/#snap-to – Twisty

+0

@ Twisty Zbuduję przykład w jsFiddle, poczekaj na pls :) –

+0

@ Twisty Zaktualizowałem pytanie. Nad pytaniem pojawi się wersja demonstracyjna. –

Odpowiedz

2

Zacznę od refaktoryzacji kodu, aby pozbyć się całego kodu kopiuj-wklej. Droppables można zainicjować za pomocą jednego połączenia, odwołując się do każdego wejścia w ramach wywołania zwrotnego jako $(this).next('input').

Następnie nie sklonowałbym obrazów bezpośrednio do opuszczonych pól, aby uniknąć powielania tożsamości. Utworzyłem nowe elementy obrazu z inną klasą wewnątrz slotów, ponieważ muszą one zachowywać się inaczej podczas poruszania się między slotami, w moim przykładzie bez półprzezroczystego pomocnika.

W moim przykładzie masz zdjęcia DraggedItem bez zmian. Dodałem klasę DropZone do każdego zrzucanego gniazda, aby umożliwić inicjalizację za pomocą jednego połączenia.

Po upuszczeniu obrazu sprawdzam, skąd pochodzi. Jeśli pochodzi z biblioteki, utwórz nowy element obrazu, ustaw jego numer src, aby pasował do oryginału i ustaw atrybut danych oryginalnego elementu, aby śledzić jego zachowanie w razie potrzeby. Ostatnim krokiem jest dodanie klasy DroppedItem i uczynienie jej innego rodzaju przeciąganiem bez pomocy.

Jeśli przedmiot został usunięty, to jest z innego gniazda, wystarczy zamienić zawartość pojemników i odpowiadających im wartości skrzynek input.

HTML

<table> 
    <tr> 
     <td> 
      <div id="rang1" class="DropZone"></div> 
      <input type="text" value="" id="rang1input" name="rang1value" /> 
     </td> 
     <td> 
      <div id="rang2" class="DropZone"></div> 
      <input type="text" value="" id="rang2input" name="rang2value" /> 
     </td> 
     <td> 
      <div id="rang3" class="DropZone"></div> 
      <input type="text" value="" id="rang3input" name="rang3value" /> 
     </td> 
     <td> 
      <div id="rang4" class="DropZone"></div> 
      <input type="text" value="" id="rang4input" name="rang4value" /> 
     </td> 
     <td> 
      <div id="rang5" class="DropZone"></div> 
      <input type="text" value="" id="rang5input" name="rang5value" /> 
     </td> 
     <td> 
      <div id="rang6" class="DropZone"></div> 
      <input type="text" value="" id="rang6input" name="rang6value" /> 
     </td> 
     <td> 
      <div id="rang7" class="DropZone"></div> 
      <input type="text" value="" id="rang7input" name="rang7value" /> 
     </td> 
    </tr> 
</table> 
<img id="img1" class="DraggedItem" src="http://dummyimage.com/50x50/000/fff&text=1" /> 
<img id="img2" class="DraggedItem" src="http://dummyimage.com/50x50/000/fff&text=2" /> 
<img id="img3" class="DraggedItem" src="http://dummyimage.com/50x50/000/fff&text=3" /> 
<img id="img4" class="DraggedItem" src="http://dummyimage.com/50x50/000/fff&text=4" /> 
<img id="img5" class="DraggedItem" src="http://dummyimage.com/50x50/000/fff&text=5" /> 
<img id="img6" class="DraggedItem" src="http://dummyimage.com/50x50/000/fff&text=6" /> 
<img id="img7" class="DraggedItem" src="http://dummyimage.com/50x50/000/fff&text=7" /> 

CSS

table { margin-bottom: 50px; } 
td div { width: 50px; height: 50px; border:1px solid silver; margin-bottom: 10px;} 
td input { width: 50px; } 

JavaScript

$('.DraggedItem').draggable({ 
    helper: 'clone', 
    cursor:'move', 
    opacity: 0.7 
}); 

var droppedOptions = { 
    revert: 'invalid', 
    cursor: 'move' 
}; 

$('.DropZone').droppable({ 
    drop: function(ev, ui) { 
     var dropped = ui.draggable; 
     var droppedOn = $(this); 

     if(ui.draggable.is('.DroppedItem')) { 
      // Item is dragged from another slot, swap images 

      var draggedFrom = ui.draggable.parent(); 
      droppedOn.find('img').appendTo(draggedFrom); 
      dropped.css({ top:0, left:0 }).appendTo(droppedOn); 

      var temp = '' + droppedOn.next('input').val(); 
      draggedFrom.next('input').val(temp); 
      droppedOn.next('input').val(dropped.data('id')); 
     } else { 
      // Item is dragged from library 

      droppedOn 
       .empty() // Delete already dropped items 
       .next('input') 
        .val(dropped.attr('id')); 

      $('<img class="DroppedItem">') 
       .attr('src', dropped.attr('src')) 
       .data('id', dropped.attr('id')) 
       .draggable(droppedOptions) 
       .appendTo(droppedOn); 
     } 
    } 
}); 

JS Fiddle example

Zauważ, że w moim przykładzie zmieniłem typ wejścia na text dla wyświetlacza, po prostu zmień go z powrotem na hidden i wszystko gotowe.

+0

Omg man jesteś legendą !!! Nie wiem, jak ci wystarczająco podziękować! Utknąłem z tym i po prostu rozwiązałeś to wszystko w bardzo prosty i niesamowity sposób! Bardzo dziękuję za pomoc i wysiłek, nie wiem jak ci podziękować. Dziękuję bardzo za poświęcony czas i wysiłek! –

+1

@ ElomarAdam Nie ma problemu, cieszę się, że pomogło! – DarthJDG

1

Oto co zrobiłem: https://jsfiddle.net/Twisty/rdxmmobe/3/

$(function() { 
    $(".DraggedItem").draggable({ 
     helper: 'clone', 
     cursor: 'move', 
     opacity: 0.7, 
     revert: true 
    }); 

    $("div[id^='rang']").droppable({ 
     drop: function (ev, ui) { 
      var target = $("#" + $(this).attr("id") + "input"); 
      target.val($(ui.draggable).attr('id')); 
      var dropCopy = $("<img>"); 
      console.log("Setting DropCopy Source: " + $(ui.draggable).attr('src')); 
      $(dropCopy).attr('src', $(ui.draggable).attr('src')); 
      var droppedOn = $(this); 
      droppedOn.append(dropCopy).css({ 
       top: 0, 
       left: 0 
      }); 
     } 
    }); 
}); 
+0

Dziękuję za twój wysiłek. Naprawdę nie rozwiązuje problemu, ale doceniam twój wysiłek. ^^ Jeszcze raz dziękuję! –

+1

Mam nadzieję, że mój przykład pomoże ci ulepszyć twój kod. 1 funkcja dla wielu elementów może uczynić twoje życie szczęśliwszym. – Twisty

Powiązane problemy