Сортируемый пользовательский интерфейс jQuery - проблема ConnectToSortable - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь создать интерфейс перетаскивания для иконок.По сути, у меня есть три контейнера div, каждый с упорядоченным списком внутри.Первый список содержит значки (как <li><img /></li>), а два оставшихся - пустые и должны получать значки, перетаскиваемые и сортируемые внутри них.Каждый пустой список связан со строкой, в которой значки будут отображаться в интерфейсе.

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

Все работает, как и ожидалось, за исключением одной проблемы: пользовательская опция Ctrl / Cmd + Click перестает работать с перетаскиваемыми элементами, которые уже были удалены.

После реализации,Я провел некоторое тестирование и максимально сузил его: кажется, что виновником является параметр ConnectToSortable в функции Draggable.Если параметр закомментирован, функция Ctrl + Click работает должным образом.Проблема в том, что мне нужно использовать этот параметр для хранения всех значков, связанных с каждым пустым списком (строкой), чтобы я мог получить их позже.

Вот мой HTML-код:

<div id="container">
<div id="row1" class="row">
    <ol class="drop-container">
        <li class='draggable'><span class="squares blue-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares blue-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares blue-squares">&nbsp;</span></li>
    </ol>
</div>
<div id="row2" class="row">
    <ol class="drop-container">
        <li class='draggable'><span class="squares red-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares red-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares red-squares">&nbsp;</span></li>
    </ol>
</div>
<div id="row3" class="row">
    <ol class="drop-container">
        <li class='draggable'><span class="squares green-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares green-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares green-squares">&nbsp;</span></li>
    </ol>
</div>

А вот мой JS-код:

$(function() {
// Custom function for Ctrl-Cmd Left Mouse Click
$(".draggable, .ui-draggable").click(function(e) {
    if (e.ctrlKey || e.metaKey === true) {
        if (!$(this).hasClass("selected")) {
            $(this).addClass("selected");
        } else {
            $(this).removeClass("selected");
        }
    }
});
// Draggable
$('.draggable').draggable({
    connectToSortable: ".drop-container",
    delay: 200,
    drag: function(event, ui) {
        $(".selected").removeClass("selected");
    },
    helper: "original",
    revert: "invalid",
    revertDuration: 300
});
// Droppable
$('.drop-container').droppable({
    tolerance: "touch"
});
// Sortable
$('.drop-container').sortable({
    appendTo: ".drop-container",
    connectWith: ".drop-container",
    items: ".draggable",
    revert: true
});
// Disable selection of items
$("div, ol, ul, li, span").disableSelection();
});​

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

Я делаю что-то не так или это ошибка jQuery UI?Любые идеи или обходные пути приветствуются и приветствуются!

1 Ответ

0 голосов
/ 14 марта 2012

Вы должны сделать

$('.drop-container').sortable("refresh"); 

, как только предметы будут уронены. См .: http://jqueryui.com/demos/sortable/#method-refresh

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