jQuery ui droppable не срабатывает

Я пытаюсь создать систему перетаскивания, в которой изображения можно перетаскивать в определенный div. Поскольку изображения находятся в скроллере, я должен использовать клон для перетаскивания. У меня проблема в том, что событие «drop», похоже, не запускается, когда я перетаскиваю изображение в div. Я искал в Интернете, но не нашел решения, которое работает.

У меня есть следующее:

$( "#droppable" ).droppable({
  activeClass: "ui-state-highlight",
  drop: function( event, ui ) {
    alert('ok');
  }
});

$( ".draggable" ).draggable({ 
  helper: "clone", 
  scroll: false
});

так что, когда элемент .draggable перетаскивается в div #droppable, я должен увидеть предупреждение. Droppable действительно получает активный класс, так что это заходит так далеко, но когда я бросаю изображение, ничего не происходит - оно просто исчезает.

HTML-код:

Для droppable (он находится в прокручиваемом div, используя прокручиваемый jQuery ui):

<div class="scrollable" id="scrollable">
  <div id="scrollable-items" class="items">
    <div id="scrollerDiv_1">
      <div>
        <div id="droppable" class="droppable ui-droppable">
          <div class="ImageArea"></div>
          <div class="CaptionArea">Drag a photo or video into the box above to create a new frame</div>
        </div>
      </div>
    </div>
  </div>
</div>

Для перетаскиваемых изображений:

<div id="EditMain">
  <div id="libraryMain">
    <div id="my-asset-list" class="assetList">
      <div class="listItem draggable scroll-content-item ui-draggable">
        <span class="assetItem">
          <img src="xxx"/>
        </span>
      </div>
      <div class="listItem draggable scroll-content-item ui-draggable">
        <span class="assetItem">
          <img src="xxx"/>
        </span>
      </div>
      <div class="listItem draggable scroll-content-item ui-draggable">
        <span class="assetItem">
          <img src="xxx"/>
        </span>
      </div>
    </div>
  </div>
</div>

person Sharon    schedule 13.09.2012    source источник
comment
@Sharon, кажется, все в порядке: jsfiddle.net/baQL9 Вы разместили коды js в блоке готовности документа, например $(function(){ ... });?   -  person Halil Özgür    schedule 13.09.2012
comment
Спасибо. HTML генерируется на лету, а jquery применяется после их создания. Отчасти поэтому я добавил часть activeClass: ui-state-highlight, чтобы я мог видеть, что jquery запускается. Кажется, это происходит, когда класс добавляется в порядке. Кажется, он просто не запускает часть «капля».   -  person Sharon    schedule 13.09.2012


Ответы (5)


в функции drop вам нужно добавить отброшенный элемент в контейнер:

drop: function(event, ui) {
    $('#mycontainer').append(ui.draggable);
    return true;
}

Возвращаемое значение указывает, было ли удаление успешным или нет.

person Steven Hunt    schedule 13.09.2012
comment
Спасибо. Я пробовал это, но это не имеет никакого значения. Это как если бы он даже не пытался запустить часть «падения». - person Sharon; 13.09.2012
comment
Должно быть, мешает другая часть страницы... Я посмотрю и посмотрю, не происходит ли чего-нибудь еще, что могло бы помешать ее работе. Спасибо. - person Sharon; 13.09.2012

Получилось - спасибо за помощь.

Как только я понял, что это работает для других, я решил, что это должно быть конфликт с чем-то еще — и, конечно же, был еще один «выпадающий» сценарий, который я вставил много лет назад и забыл о нем. Удалил и все работает.

person Sharon    schedule 13.09.2012

для меня это работает правильно .. сделайте одну вещь, временно придайте цвет фона вашему удаляемому div. чтобы вы могли знать область, в которую вы можете поместить изображение. потому что вы можете поместить изображение только в область, которую вы определили как удаляемую

person Priya    schedule 13.09.2012
comment
У него уже есть фоновый цвет. Я вижу, когда заканчиваю, потому что добавляется класс ui-state-highlight. Так что я не думаю, что это проблема. Но спасибо за ответ. - person Sharon; 13.09.2012

Это будет работать для вас:

$("#droppable").droppable({
            activeClass: "ui-state-highlight",
            drop: function (event, ui) {
                alert('ok');
                x = $(ui.helper).clone();
                x.appendTo($(this));

            }
        });
person Priya    schedule 13.09.2012
comment
Спасибо, но пока ничего! Я собираюсь посмотреть и посмотреть, может ли что-то еще мешать. - person Sharon; 13.09.2012

Была аналогичная проблема, которая была связана с решением по сдерживанию или, в частности, с отношением перетаскиваемых и выпадающих предметов. Первоначально пробовал это безуспешно;

drag.getSymbolElement().draggable( {
       containment: 'parent',
       ...

Изменение содержания на html устранило проблему;

drag.getSymbolElement().draggable( {
       containment: 'html',
       ...

ПРИМЕЧАНИЕ. Решение было для Adobe Edge, если это дополнительный фактор.

person Quinnland23    schedule 10.09.2014