Код Stldoug работал для меня, но нет необходимости постоянно проверять элемент .data ("init") для каждого события наведения мыши. Кроме того, лучше использовать «mousemove», так как «mouseover» не всегда срабатывает, если ваша мышь уже находится над элементом, когда включается функция .live.
(function ($) {
$.fn.liveDraggable = function (opts) {
this.live("mousemove", function() {
$(this).draggable(opts);
});
};
}(jQuery));
Вот как вы его используете:
$('.thing:not(.ui-draggable)').liveDraggable();
Хитрость заключается в том, чтобы добавить ": not (.ui-draggable)" к вашему селектору. Поскольку jQuery автоматически добавит класс «ui-draggable» к вашему элементу, когда он станет перетаскиваемым, функция .live больше не будет нацеливаться на него. Другими словами, он срабатывает только один раз, в отличие от другого решения, которое срабатывает снова и снова, когда вы перемещаете вещи.
В идеале вы могли бы просто .unbind "mousemove", но это не работает с .live, к сожалению.