Невозможно изменить перетаскиваемый элемент при падении - PullRequest
0 голосов
/ 14 июля 2020

Я новичок в jQuery. У меня есть требование перетаскивания, когда у меня есть «3 перетаскиваемых div» с идентификаторами «parent1, parent2 и parent3», которые должны быть помещены в «родительский элемент контейнера div».

Сценарий: когда я перетаскиваю div с идентификатором 'parent1' в контейнере div 'drop-parent' он удаляется, но когда я выбираю div 'parent 2' для удаления, он не может заменить div 'parent1' и перейти в его исходную позицию. См. Ссылку ниже JSBin для того же [щелкните здесь]

$(".child").draggable({
        revert: "invalid",
        containment: ".drag_drop_container"
    });

    $('.drop-parent').droppable({
        accept: ".drag-parent > .child",
        drop: function(event, ui) {
            Dropped($(this), ui.draggable.click());
        }
    });
    $('.drag-parent').droppable({
        accept: function(draggable) {
            if($(this).attr('id').split('parent')[1] == draggable.attr('data-id')) {
                return true;
            }
        },
        drop: function(event, ui) {
            Reverted($(this), ui.draggable.click());
        }
    });
    function Dropped($this, $item) {
        $item.css({'left': '0px', 'top': '0px'});
        $this.droppable("disable").css('opacity',0.9);;
        if($item.parent().hasClass('drop-parent')) {
            $item.parent().droppable("enable");
        } else {
            $('.text-input').val($item.attr('data-id'));
        }
        $this.append($item);
        $this.sortable();
    }
    function Reverted($this, $item) {
        $item.css({'left': '0px', 'top': '0px'});
        $item.parent().droppable("enable");
        $this.append($item);
        $('.droped_val').val('');
    }
.drop-parent {
    //border: 1px solid red!important;
    /* background-color: red; */
    //width: 640px; /*can be in percentage also.*/
    height: 42px;
    width: 100px;
    //margin: 0 auto;
    left:-4px;
    //padding: 10px;
    top:184px;
    position: relative;
}
.dragbody {
    //border: 1px solid blue!important;
    /* background-color: red; */
    //width: 281px;
    //position: relative;
    //height: 53px;
}
<!DOCTYPE html>
<html>
<head>
<script src="https://emea.focusvision.com/survey/selfserve/2140/190505/drag1.js"></script>
    <script src="https://emea.focusvision.com/survey/selfserve/2140/190505/drag2.js"></script>
</head>
<body>
<div class="drag_drop_container">
    <div class="cards">
        <table align="center" class="Table1">
            <tr>
                <td>
                    <div class="drag-parent" id="parent1">
                        <div class="child" data-id=1><img src="https://singapore.decipherinc.com/survey/selfserve/54e/200701/happy.png"/></div>
                    </div>
                </td>
                <td>
                    <div class="drag-parent" id="parent2">
                        <div class="child" data-id=2><img src="https://singapore.decipherinc.com/survey/selfserve/54e/200701/neutral.png"/></div>
                    </div>
                </td>
                <td>
                    <div class="drag-parent" id="parent3">
                        <div class="child" data-id=3><img src="https://singapore.decipherinc.com/survey/selfserve/54e/200701/sad.png"/></div>
                    </div>
                </td>
            </tr>
        </table>
    </div>
    <div align="center" class="dragbody">
        <div align="center" class="drop-parent">
        </div>
        <img src="https://singapore.decipherinc.com/survey/selfserve/54e/200701/body.png" width="250px"/>

    </div>
</div>
</body>
</html>

1 Ответ

1 голос
/ 20 июля 2020

Я отредактировал функцию Dropped() так, чтобы она перемещала все старые элементы, находящиеся в теле, обратно к их родительским, а затем добавляла новый.

$(".child").draggable({
  revert: "invalid",
  containment: ".drag_drop_container"
});

$('.drop-parent').droppable({
  accept: ".drag-parent > .child",
  drop: function(event, ui) {
    Dropped($(this), ui.draggable.click());
  }
});
$('.drag-parent').droppable({
  accept: function(draggable) {
    if ($(this).attr('id').split('parent')[1] == draggable.attr('data-id')) {
      return true;
    }
  },
  drop: function(event, ui) {
    Reverted($(this), ui.draggable.click());
  }
});

function Dropped($this, $item) {
  $item.css({
    'left': '0px',
    'top': '0px'
  });
  if ($item.parent().hasClass('drop-parent')) {
    $item.parent().droppable("enable");
  } else {
    $('.text-input').val($item.attr('data-id'));
  }
  for (i = 0; i < $this.children().length; i++) {
        $oldElement = $($this.children()[i]);
    $("#parent" + $oldElement.data("id")).append($oldElement);
  }
  $this.append($item);
  $this.sortable();
}

function Reverted($this, $item) {
  $item.css({
    'left': '0px',
    'top': '0px'
  });
  $item.parent().droppable("enable");
  $this.append($item);
  $('.droped_val').val('');
}
.drop-parent {
    //border: 1px solid red!important;
    /* background-color: red; */
    //width: 640px; /*can be in percentage also.*/
    height: 42px;
    width: 100px;
    //margin: 0 auto;
    left:-4px;
    //padding: 10px;
    top:184px;
    position: relative;
}
.dragbody {
    //border: 1px solid blue!important;
    /* background-color: red; */
    //width: 281px;
    //position: relative;
    //height: 53px;
}
<!DOCTYPE html>
<html>

  <head>
    <script src="https://emea.focusvision.com/survey/selfserve/2140/190505/drag1.js"></script>
    <script src="https://emea.focusvision.com/survey/selfserve/2140/190505/drag2.js"></script>
  </head>

  <body>
    <div class="drag_drop_container">
      <div class="cards">
        <table align="center" class="Table1">
          <tr>
            <td>
              <div class="drag-parent" id="parent1">
                <div class="child" data-id=1>
                  <img data-parent-id="1" src="https://singapore.decipherinc.com/survey/selfserve/54e/200701/happy.png" />
                </div>
              </div>
            </td>
            <td>
              <div class="drag-parent" id="parent2">
                <div class="child" data-id=2>
                  <img data-parent-id="2" src="https://singapore.decipherinc.com/survey/selfserve/54e/200701/neutral.png" />
                </div>
              </div>
            </td>
            <td>
              <div class="drag-parent" id="parent3">
                <div class="child" data-id=3>
                  <img data-parent-id="3" src="https://singapore.decipherinc.com/survey/selfserve/54e/200701/sad.png" />
                </div>
              </div>
            </td>
          </tr>
        </table>
      </div>
      <div align="center" class="dragbody">
        <div align="center" class="drop-parent">
        </div>
        <img src="https://singapore.decipherinc.com/survey/selfserve/54e/200701/body.png" width="250px" />

      </div>
    </div>
  </body>

</html>
...