jquery сортируемая / перетаскиваемая двойная стрельба - PullRequest
7 голосов
/ 23 августа 2010

У меня есть код перетаскивания, который работает нормально, как есть. Просто есть маленький запрос. Я заметил, что если я добавляю оповещение в функцию удаления для целей отладки (например, 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 ]

3 голосов
/ 09 июля 2013

Проверьте DEMO http://jsfiddle.net/yeyene/FUyTe/1/

Как вы упомянули, да, совместное использование с возможностью сбрасывания и сортировки приводит к возникновению этого странного двойного события.Но, если вы все еще хотите использовать 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 упавшего элемента.

DEMO http://jsfiddle.net/yeyene/7fEQs/8/

0 голосов
/ 23 августа 2010

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

...