jquery сортируемый / перетаскиваемый двойной выстрел

У меня есть код перетаскивания, который работает нормально, как есть. Просто есть маленький запрос. Я заметил, что если я добавляю оповещение в функцию удаления для целей отладки (например, alert(draggedItem.text());), оно запускает оповещение дважды, когда я помещаю что-либо в область перетаскивания. В другом посте я читал, что использование droppable & sortable вместе приводит к возникновению этого странного двойного события. Но мне нужно использовать событие droppable, чтобы получить перетаскиваемый объект item (ui.draggable) - так я могу манипулировать им, когда я его сбрасываю. Если есть какой-то другой способ получить перетаскиваемый объект, пожалуйста, скажите мне:) Также, если у вас есть объяснение, почему это происходит, это было бы интересно...

$(".field > li").draggable({
    helper:'clone',
    opacity: 0.4,
    connectToSortable:'.dragrow'
});

$(".dragrow").droppable({
    drop: function(e, ui) {
        draggedItem = ui.draggable;
        //alert(draggedItem.text());
    }
}).sortable({ //code here to do stuff with 'draggedItem'

У меня также есть другой запрос, связанный с этим, но так как мой код довольно большой, я не могу опубликовать полную информацию здесь. Так что я понимаю, если вы не можете помочь - просто если что-то приходит на ум, это было бы действительно здорово. По сути, у меня есть список "блоков", которые я могу перетащить в несколько строк. Отдельные строки могут быть скрыты с помощью события переключения. Если у меня есть 3 ряда, я могу перетащить блоки в любой из них. Если затем я спрячу первый, я не смогу перетащить его в другие два ряда. Я все еще могу сортировать их, хотя. И как только я начну сортировать их, я снова смогу перетаскивать их. Weird...

2 ответа

Проверьте ДЕМО http://jsfiddle.net/yeyene/FUyTe/1/

Как вы упомянули, да, совместное использование droppable & sortable приводит к возникновению этого странного двойного события. Но, если вы все еще хотите использовать draggedItem objectВы все еще можете использовать это с возможностью сортировки получения.

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

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

$(".field > li").draggable({
    helper:'clone',
    opacity: 0.4,
    connectToSortable:'.dragrow'
});

$(".dragrow").droppable({
    drop: function(e, ui) {
        draggedItem = ui.draggable;
    }
}).sortable({ 
    receive: function(e, ui) {
        // here is the draggedItem object of "droppable"
        alert(draggedItem.text());

        // here is the draggedItem object of "sortable"
        draggedItem2 = ui.item;
        //alert(draggedItem2.text());
    }
});

Вот один из способов изменить html удаленного элемента.

ДЕМО http://jsfiddle.net/yeyene/7fEQs/8/

Вы проверили, что у вас нет тега jquery-скрипта на вашем сайте дважды?

Другие вопросы по тегам