jQuery droppable $ (this) возвращает неверный идентификатор с переполнением: auto - PullRequest
0 голосов
/ 27 марта 2011

У меня есть несколько div на странице с переполнением: auto, у многих больше li, чем умещается в видимой области. Когда я перетаскиваю из одного div в другой, если div над целевым div имеет длинный список, $ (this) будет возвращать id этого div, а не div, в который попал мой элемент. Визуально и в исправленном html он работает нормально, но мне нужно иметь возможность получить идентификатор div, в котором он находится, и не могу понять это. Похоже, что должен быть обходной путь ???

Моя цель - надежно получить идентификатор получающего div. Местоположение не изменилось к моменту запуска события выпадения. Возможно, будет полезно инициализировать каждый сбрасываемый div по id в обратном порядке, а не использовать класс «sortable», но их может быть 10 или 15, и это выглядит ужасно неуклюже.

Вот мой код инициализации (после попытки жадного: true):

$( ".sortable" ).sortable({
        connectWith : ['.sortable'],
        dropOnEmpty : true,
        placeholder : "ui-state-highlight",
        revert: true,
        start  : function(event, ui) {
            getEquip($(ui.item).attr('id').slice(8));
        }
    });
    $( ".sortable" ).draggable({
        helper: "clone",
        revert: "invalid"
    });
    $( ".sortable" ).droppable({
        greedy : true,
        drop: function( event, ui ) {
            var msg = 'Moved ' + $(ui.draggable).text() + ', id#' + $(ui.draggable).attr('id').slice(8) + ' to';
            msg += ' ' + $(this).attr('id'); //<<== gives wrong id if list above is long 
            msg += ' ' + $('#' + $(ui.draggable).attr('id')).parent().attr('id');
            writeFooter(msg);//Moved hydrant wrenches, id#164 to sortable16 sortable22  
        },
    });

1 Ответ

0 голосов
/ 27 марта 2011

Найден обходной путь. Если я инициализирую сбрасываемые элементы div снизу вверх по id, то есть в обратном порядке, проблема исчезнет. Ранее я инициализировал их по классам. Пересмотренный фрагмент кода выглядит следующим образом, где subloc [i-1] [0] является идентификатором sublocation id #:

for (var i = subloc.length; i > 0; i--) { //init droppables backwards to overcome overflow bug
        $( "#sortable" + subloc[i-1][0]).droppable({
            tolerance : 'intersect',
            drop: function( event, ui ) {...
...