Клонированный JQuery Dragable не может быть сброшен на себя - PullRequest
4 голосов
/ 27 января 2011

Используя пользовательский интерфейс jQuery, у меня есть div foo, который можно перетаскивать и перетаскивать, и div bar, который можно опускать только Перетаскивание происходит при включенной опции helper: 'clone', поэтому исходный foo фактически не перемещается. Когда я бросаю клонированный foo поверх оригинального foo, drop: function не вызывается.

Это кажется странным, потому что это работает, когда я бросаю клонированный foo на bar. Это также работает, чтобы бросить другие перетаскиваемые объекты на foo. Единственная проблема в том, что я не могу бросить foo на себя.

Я только что сказал foo и bar, и перетаскиваемый и сбрасываемый столько раз, что даже я запутался, но этот пример должен прояснить ситуацию:

http://jsfiddle.net/5KATZ/

Если вы попытаетесь перетащить первое поле на второе или третье, это сработает. Но если вместо того, чтобы уронить его во второе поле, вы начнете перетаскивать его, а затем попытаться уронить его на себя, ничего не произойдет. Если так все должно работать, то что я делаю не так? Если это ошибка в jQuery UI, то можете ли вы найти какие-нибудь хорошие обходные пути?

1 Ответ

1 голос
/ 28 января 2011

РЕДАКТИРОВАТЬ

Этот работает лучше: http://jsfiddle.net/kW369/, Я тоже оставил старый.

Хороший вопрос!Это поведение по умолчанию в jQuery, и я думаю, что это правильно, так работает ... Странно, когда нужно бросить элемент на себя.В любом случае попробуйте этот jsFiddle , который является частичным решением вашей проблемы.

Он работает, определяя положение перетаскиваемого элемента div и просматривая его, если он падает с первым положением элемента div.Я знаю, что это не самое ясное решение, но единственное, которое мне удалось найти.Кроме того, в этом есть ошибка, поскольку позиция вычисляется с использованием верхнего левого угла элемента div, поэтому, если вы перетащите первый элемент div на второй, поместив мышь внутри второго элемента div, НО верхний левый угол элемента div, который вы перетаскиваетенаходится поверх первого, он будет вести себя так, как будто вы бросили его на оба элемента div.Вы должны использовать положение мыши вместо ui.position ['top'] и ui.position ['top'] и влево для более точного определения положения.

...