Событие jQuery droppable 'over' не запускается, когда мышь находится над перетаскиваемой мышью - PullRequest
1 голос
/ 06 июля 2010

У меня есть список задач, которые можно перетаскивать. У всех них есть обработчик событий «over», чтобы они загорались при наведении на них другой задачи.

Это работает не совсем так, как я хочу. Когда я начинаю перетаскивать одну задачу, другие задачи не загораются должным образом, за исключением случаев, когда мышь фактически не находится над перетаскиваемым помощником (это возможно, потому что я указал axis = 'y', чтобы я мог перемещать курсор слева и справа от помощника, не прерывая сеанс перетаскивания).

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

Так почему же наличие перетаскиваемого помощника над сбрасываемой целью не вызывает событие over, в то время как курсор над сбрасываемой целью вызывает это событие?

Вот код:

$(mySubtasks).each(function(){
                    var _this = this;
                    $(_this).draggable({
                        axis: 'y',
                        containment: '#plannerTab',
                        disabled: true,
                        revert: 'invalid',
                        start: function(e, ui){
                            currentlyDragging = true;
                            $(_this).droppable('disable');
                            $('#messageArea').text('Currently dragging');
                            $(_this).css('position', 'absolute');
                        },
                        stop: function(e, ui){
                            currentlyDragging = false;
                            returnToSortableTasklist();
                            $(_this).css('position', 'relative');
                        }
                    });
                    $(_this).droppable({
                        accept: '.subtask',
                        disabled: true,
                        drop: function(e, ui){
                            setTimeout('currentlyDragging = false;', 1000);
                            alert('Dropped something legal on a subtask');
                            //Deactivate all draggable/droppable and reinstate sortable
                            returnToSortableTasklist();
                        },
                        over: function(e, ui){
                            $(this).addClass('dragdropTargetHover');
                            $(ui.helper).addClass('dragdropHelperHover');
                        },
                        out: function (e, ui){
                            $(this).removeClass('dragdropTargetHover');
                            $(ui.helper).removeClass('dragdropHelperHover');
                        }
                    });

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Я обнаружил, что мое «падение» даже всегда срабатывало, хотя мое «завершение» не срабатывало, особенно когда я перетаскивал свой объект на другой объект, который был близок к перетаскиваемому объекту. Предложение поиграть с размером помощника не сработало, но заставило меня поэкспериментировать с другими атрибутами. Я был удивлен, обнаружив, что, когда я увеличил свою scrollSensibility, моя проблема ушла. То есть, поскольку моя перетаскиваемая область была очень большой (по горизонтали), я установил scroll: true и scrollSensitivity: 160. Когда я увеличил чувствительность прокрутки до 400, моя проблема ушла.

1 голос
/ 17 июля 2010

И еще кое-что мешало: при перетаскивании помощник был физически довольно маленьким.Я удостоверился, что установил им хороший размер при начале перетаскивания, чтобы они легко могли быть обнаружены сбрасываемыми объектами, над которыми я их перетаскивал.

...