как перетащить из прокручиваемого div в dropbleable и затем перетащить снова? - PullRequest
5 голосов
/ 10 октября 2011

У меня есть прокручиваемый список в левой части страницы (переполнение: авто) и несколько выпадающих списков в правой части страницы.Я нашел обходной путь, позволяющий перетаскивать элемент из списка в контейнер с использованием клона here , но когда элемент отбрасывается, он получает позицию: абсолютную и верхнюю и правую позиции, добавленные к встроенному стилюнаряду с Z-индексом, который был изначально там.Все остальные прикрепленные классы находятся в копии, просто после перетаскивания этот элемент не может быть перетащен снова?

Есть ли способ сделать это или удалить встроенный стиль, добавленный процессом клонирования?

Упрощенный код, показывающий проблему, показан ниже - у вас должна быть возможность просто вырезать и вставить страницу и вставить ее в свой корневой каталог, чтобы протестировать ее.Заранее спасибо.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js">   </script>

<script>
  $(document).ready(function() {
  var dropped = false;
  $(".container").droppable({
     drop: function(event, ui) {
            dropped = true;
            $.ui.ddmanager.current.cancelHelperRemoval = true;
            ui.helper.appendTo(this);
    }
 });
 $(".item").draggable({
     revert: 'invalid',
     helper: function(){
        $copy = $(this).clone();
        return $copy;
     },
      start: function(event, ui) {
                    dropped = false;
                    $(this).addClass("hide");
                },
                stop: function(event, ui) {
                    if (dropped==true) {
                        $(this).remove();
                    } else {
                        $(this).removeClass("hide");
                    }
                }
        });
    });
    </script>

    <style>
    .scrollable {
       margin-top:5px;
       float:left;
   height:140px;
   width:60px;
   overflow:auto;
}

.container {
  height: 140px;
  width: 160px;
  float:left;
  border:3px solid black;
  margin:5px;
}

.item {
  float:left;
  height:40px;
  width:40px;
 }

.red {background-color: red; }
.black {background-color: black;color: white;}
.green {background-color: green;}
.blue {background-color: blue; color: white;}
.yellow {background-color: yellow;}

</style>
</head>

<body>
  <div id="list" class="scrollable">
    <div id="p1" class="item red">A</div>
    <div id="p2" class="item black">B</div>
    <div id="p3" class="item green">C</div>
    <div id="p4" class="item blue">D</div>
    <div id="p5" class="item yellow">E</div>
  </div>
  <div>
    <div id="c1" class="container"></div>
    <div id="c2" class="container"></div>
    <div id="c3" class="container"></div>
  </div>
</body>

1 Ответ

3 голосов
/ 16 октября 2011

В вашем методе перетаскиваемой остановки я взял клонированный элемент и сделал его перетаскиваемым.

    stop: function(event, ui) {
        if (dropped==true) {
            $(this).remove();
        } else {
            $(this).removeClass("hide");
        }
        $('#'+$(this).attr('id')).draggable({revert: 'invalid'});
    }

Когда перетаскиваемый элемент клонируется, он сохраняет класс «ui-draggable», но этого недостаточно, чтобы сделать его перетаскиваемым. Это должен быть отскок.

http://jsfiddle.net/CMYzw/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...