2016-11-04 4 views
0

У меня есть один список, который должен быть связан с другим списком, но для каждого элемента в списке изменяется целевой список.Динамический набор connectWith при перетаскивании jQuery sortable

Я использую

connectWith: '.valid' 

И тогда в моей on('sortstart') функции (в то время как элемент перетаскивается), я проверку свойств элементов и appplying класса valid в соответствующие списки, чтобы соединиться с. Затем я также запускаю $('.valid').sortable()

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

Я понимаю, что это может потребовать слишком много сортировок jquery, но было бы неплохо, если бы был способ.

Любые мысли об этом были бы весьма признательны.

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

http://codepen.io/anon/pen/PboBvj

+0

Другие 2 списка никогда не инициализируются как 'sortable'. Вы не смогли перетащить элемент к ним. – Twisty

ответ

0

Во-первых, это может быть возможно дубликат: reject invalid sortable item in a sortable list

Чтобы ответить на ваш вопрос, это может быть сделано, но только не так, как вы клоните. Вот рабочий пример из вашего примера кода: https://jsfiddle.net/Twisty/56kfcba5/

HTML

<ul id="list0" class="source"> 
    <li id="item-1" data-connect="list1">ITEM 1</li> 
    <li id="item-2" data-connect="list2">ITEM 2</li> 
</ul> 

<ul id="list1" class="target"></ul> 
<ul id="list2" class="target"></ul> 

Помните, что все идентификаторы должны быть уникальными.

CSS

.source, 
.target { 
    border: 1px solid #000; 
    min-height: 20px; 
    max-width: 200px; 
} 

JQuery

$(function() { 
    $('.source').sortable({ 
    connectWith: '.target', 
    revert: true 
    }); 
    $(".target").sortable({ 
    receive: function(e, ui) { 
     if (ui.item.data("connect") !== $(this).attr("id")) { 
     // reject the item 
     ui.sender.sortable('cancel'); 
     } 
    } 
    }) 
}); 

Многое, как статьи я связан с, мы сравниваем элемент из source когда target списки получают. Опция connectTo может быть сделана в одностороннем порядке и в этом случае. Таким образом, у нас есть целевые установки, которые не будут принимать конкретные элементы.