Вы можете использовать метод «data» в элементах droppable, чтобы сохранить ссылку на перетаскиваемые объекты, которые они приняли до сих пор. Так, например, вы можете сделать что-то вроде этого:
<script language="javascript">
$(function() {
$('.droppable').droppable({
greedy:true,
[...other:options],
over: function(event,ui) {
var already_dragged = $(this).data('mysite.dropped_items');
if($.inArray(ui.draggable.id,already_dragged) >= 0) {
$(this).droppable('disable');
}
},
out: function(event,ui) {
$(this).droppable('enable');
},
drop: function(event,ui) {
var already_dragged = $(this).data('mysite.dropped_items');
if($.inArray(ui.draggable.id,already_dragged) < 0) {
already_dragged.push(ui.draggable.id);
$(this).data('mysite.dropped_items',already_dragged);
}
}
}).data('mysite.dropped_items',new Array());
});
</script>
<div id="droppable1" class="droppable"></div>
<div id="droppable2" class="droppable"></div>
<div id="draggable_1" class="draggable"></div>
По сути, это то, что это делает ...
Мы использовали объект данных jQuery для прикрепления массива mysite.dropped_items к каждому элементу $ ('. Droppable'). Каждый раз, когда вы наводите курсор мыши на один из этих предметов, система будет проверять, есть ли идентификатор этого предмета в своем массиве «mysite.dropped_items». Если это так, то сброс будет отключен. Если это не так, все будет работать как положено.
Я не тестировал этот точный блок кода, но теоретически он должен работать. Я надеюсь, что это помогает.