Một cách tiếp cận bạn có thể cố gắng giải quyết điều này là chuyển tất cả hành vi của mình sang sortable
và chỉ sử dụng droppable
để thực hiện chuyển đổi để xác định hành vi bạn cần. Bằng cách đó, bạn có thể xử lý mọi thứ ở một nơi, điều này sẽ giải quyết một số hiệu ứng không mong muốn của việc có cả hai số sortable
và droppable
trên cùng một yếu tố. Như thế này:
Trong ống dẫn của bạn, bạn đặt công tắc trên over
và out
và đặt các đối tượng bạn cần.
$("li.placeholder").droppable({
accept: "li.to-drag",
hoverClass: "correct",
activeClass: "active",
revert: false,
tolerance: "pointer",
over: function (e, ui) {
curDrag = ui.draggable;
curTarget = e.target;
curThis = $(this);
overSortable = true;
},
out: function (e, ui) {
overSortable = false;
},
drop: function (event, ui) {
}
});
Sau đó, trong trường hợp beforeStop
sortable
, bạn kiểm tra xem biến overSortable
là đúng hay không và thiết lập các hành vi đó. Tất cả những gì đề cập đến ui.draggable, this và event.target sẽ cần phải được thay thế bằng các đối tượng mà bạn đặt ở chế độ có thể phân tách. Một sự kiện tốt hơn sẽ là làm cho một hàm xử lý tất cả các hành vi này và chuyển chúng thành các đối số.
beforeStop: function (e, ui) {
if (overSortable) {
curDrag.addClass('placeholder');
var dragging = curDrag.find("img").remove();
curThis.append(dragging).addClass("dropped");
curThis.droppable('disable');
var day = curDrag.attr('data-id');
var index = $(curTarget).index();
//...
} else {
ui.item.addClass('placeholder')
}
Vẫn còn adjusments để thực hiện, nó không phải là hoàn toàn rõ ràng chính xác những gì nên xảy ra và khi nào, nhưng điều này có thể làm cho nó dễ dàng hơn để làm việc thay vì cố gắng để quản lý nhiều sự kiện được kích hoạt khi bạn thả một yếu tố, bạn chỉ quản lý một.
http://jsfiddle.net/ts290vth/4/
Đã trả lời ở đây [droppable trong droppable] (http://stackoverflow.com/questions/5504888/droppable-in-droppable). Sử dụng tùy chọn tham lam. –
Phải chấp nhận cả hai. Nó sẽ sắp xếp & nối thêm phần giữ chỗ dành riêng, nhưng khi di chuột qua một trình giữ chỗ, nó sẽ thêm vào chính trình giữ chỗ đó. –
Để phản hồi bản cập nhật của bạn, hãy bình luận ra hàm '// sorting();' của bạn và bạn sẽ thấy rằng chúng không còn tự động nối thêm nữa. Điều gì đó xảy ra khi bạn kết hợp các chức năng sắp xếp và thả của bạn. – Trevor