2012-03-10 38 views
7

Tôi sử dụng jQuery ui draggable nhưng tùy chọn appendTo không hoạt động. Tuy nhiên các tùy chọn khác như ngăn chặn hoặc lưới hoạt động đúng cách. Đây là mã:jQuery draggable và appendTo không hoạt động

HTML

<div id="demo"> 
</div> 
<div id="sidebar"> 
    <div class="item"> 
    </div> 
    <div class="item"> 
    </div> 
    <div class="item"> 
    </div> 
    <div class="item"> 
    </div> 
</div> 

kịch bản

jQuery(".item").draggable({ appendTo: "#demo", grid: [ 10, 10 ], containment: "#demo" }); 

CSS

#demo { 
    width: 500px; 
    height: 500px; 
    border: 1px solid black; 
    float: left; 
} 
#draggable { 
    background: red; 
    width: 50px; 
    height: 50px; 
} 
#sidebar { 
    float: left; 
    width: 300px; 
} 
.item { 
    cursor: pointer; 
    background: black; 
    width: 100px; 
    height: 100px; 
    margin: 10px; 
} 

Đây là một bản demo trực tiếp: http://jsfiddle.net/fzjev/

Trả lời

3

Dường như cho ap tùy chọn pendTo để nhận ra mục đang được kéo phải nằm ngoài cơ thể.

Từ jQuery UI 1.8.18 (khoảng dòng 275)

if(!helper.parents('body').length) 
    helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); 

Trong ví dụ của bạn câu lệnh if là false, vì vậy logic appendTo không bị sa thải.

+0

http://jsfiddle.net/fzjev/ Kéo một mục, bạn sẽ thấy rằng nó là kéo bên trong #demo nhưng

không thêm vào bên trong #demo. – MatthewK

+0

Che khuất câu trả lời trước của tôi (câu hỏi đó thực sự là một câu hỏi) và được cập nhật với một câu trả lời tương tự. Tôi thành thật không chắc tại sao nó được thiết lập như vậy, nhưng ít nhất chúng ta biết chuyện gì đang diễn ra. –

9

đây là lỗi mở về sự cố - Draggable: appendTo option doesn't work together with helper: 'original'.

Cách giải quyết được đề xuất là sử dụng helper: 'clone' và ẩn/hiển thị bản gốc khi bắt đầu/dừng kéo.

ví dụ:

$('.draggyThing').draggable({ 
     appendTo: '.dropArea', 
     helper: 'clone', 
     start: function (event, ui) { 
      $(this).hide(); 
     }, 
     stop: function (event, ui) { 
      $(this).show(); 
     } 
    }); 

Bạn sẽ có lẽ sau đó muốn tự thêm draggables của bạn trên drop của một yếu tố droppable.

$('.dropArea').droppable({ 
     accept: '.draggyThing', 
     drop: function (event, ui) { 
      $('.dropArea').append(ui.draggable); 
     } 
    }); 
+0

Điều này thực sự có vẻ giống như một câu trả lời cho câu hỏi của OP và một giải pháp để có hành vi tương tự như những gì sẽ được mong đợi khác. –

+1

Jquery Sortable hoạt động theo cùng một cách, nhưng có thể sắp xếp được bắt đầu trên phần tử thùng chứa của các mục có thể sắp xếp, vì vậy bạn sẽ muốn sử dụng 'ui.item.hide()/show()' thay vì '$ (this)' trong đó trường hợp –

0

Trong trường hợp của tôi, làm việc tốt những ví dụ:

$("[drag='true']").draggable({ 
    drag: handleDragDrag, 
    start: handleDragStart, 
    stop: handleDragStop, 
    helper: 'clone', 
    appendTo: 'body' 
}) 
function handleDragStart(ev, ui) { 
    $(this).show(); 
} 
function handleDragDrag(ev, ui) { 
} 
function handleDragStop(ev, ui) { 
    $(this).show(); 
} 
Các vấn đề liên quan