Làm cách nào để theo dõi vị trí của phần tử khi vị trí của nó trong danh sách có thể sắp xếp thay đổi?Vị trí có thể sắp xếp giao diện người dùng jQuery
Trả lời
Bạn có thể sử dụng đối tượng ui
cung cấp cho các sự kiện, đặc biệt là bạn muốn stop
event, các ui.item
property và .index()
, như thế này:
$("#sortable").sortable({
stop: function(event, ui) {
alert("New position: " + ui.item.index());
}
});
You can see a working demo here, nhớ những giá trị .index()
là zero-based, vì vậy bạn có thể muốn +1 cho mục đích hiển thị.
Tôi đã không hoàn toàn chắc chắn nơi tôi sẽ lưu trữ vị trí bắt đầu, vì vậy tôi muốn xây dựng trên bình luận David Boikes. Tôi thấy rằng tôi có thể lưu trữ biến trong đối tượng ui.item chính nó và lấy nó trong chức năng dừng như vậy:
$("#sortable").sortable({
start: function(event, ui) {
ui.item.startPos = ui.item.index();
},
stop: function(event, ui) {
console.log("Start position: " + ui.item.startPos);
console.log("New position: " + ui.item.index());
}
});
Bạn tiết kiệm một ngày của tôi! Câu hỏi của bạn, làm sao tôi có thể lưu vị trí mới bằng cách sử dụng ajax? – mrrsb
Tại sao họ không có một ví dụ đơn giản như thế này trên các trang người đàn ông có thể sắp xếp? Tôi thực sự không nhận ra rằng các item từ 'start' có khả năng ở trong phạm vi 'stop' cho đến khi tôi thấy điều này. – Sablefoste
Tôi không hiểu tại sao một chức năng phổ biến như vậy không phải là một phần của việc sắp xếp ... – burzum
Sử dụng cập nhật thay vì dừng
http://api.jqueryui.com/sortable/
cập nhật (sự kiện, ui)
Loại: sortupdate
Sự kiện này được kích hoạt khi người dùng dừng sắp xếp và vị trí DOM đã thay đổi.
.
dừng (sự kiện, ui)
Loại: sortstop
Sự kiện này được kích hoạt khi sắp xếp đã dừng lại. Loại sự kiện: Sự kiện
Piece of mã:
<script type="text/javascript">
var sortable = new Object();
sortable.s1 = new Array(1, 2, 3, 4, 5);
sortable.s2 = new Array(1, 2, 3, 4, 5);
sortable.s3 = new Array(1, 2, 3, 4, 5);
sortable.s4 = new Array(1, 2, 3, 4, 5);
sortable.s5 = new Array(1, 2, 3, 4, 5);
sortingExample();
function sortingExample()
{
// Init vars
var tDiv = $('<div></div>');
var tSel = '';
// ul
for (var tName in sortable)
{
// Creating ul list
tDiv.append(createUl(sortable[tName], tName));
// Add selector id
tSel += '#' + tName + ',';
}
$('body').append('<div id="divArrayInfo"></div>');
$('body').append(tDiv);
// ul sortable params
$(tSel).sortable({connectWith:tSel,
start: function(event, ui)
{
ui.item.startPos = ui.item.index();
},
update: function(event, ui)
{
var a = ui.item.startPos;
var b = ui.item.index();
var id = this.id;
// If element moved to another Ul then 'update' will be called twice
// 1st from sender list
// 2nd from receiver list
// Skip call from sender. Just check is element removed or not
if($('#' + id + ' li').length < sortable[id].length)
{
return;
}
if(ui.sender === null)
{
sortArray(a, b, this.id, this.id);
}
else
{
sortArray(a, b, $(ui.sender).attr('id'), this.id);
}
printArrayInfo();
}
}).disableSelection();;
// Add styles
$('<style>')
.attr('type', 'text/css')
.html(' body {background:black; color:white; padding:50px;} .sortableClass { clear:both; display: block; overflow: hidden; list-style-type: none; } .sortableClass li { border: 1px solid grey; float:left; clear:none; padding:20px; }')
.appendTo('head');
printArrayInfo();
}
function printArrayInfo()
{
var tStr = '';
for (tName in sortable)
{
tStr += tName + ': ';
for(var i=0; i < sortable[tName].length; i++)
{
// console.log(sortable[tName][i]);
tStr += sortable[tName][i] + ', ';
}
tStr += '<br>';
}
$('#divArrayInfo').html(tStr);
}
function createUl(tArray, tId)
{
var tUl = $('<ul>', {id:tId, class:'sortableClass'})
for(var i=0; i < tArray.length; i++)
{
// Create Li element
var tLi = $('<li>' + tArray[i] + '</li>');
tUl.append(tLi);
}
return tUl;
}
function sortArray(a, b, idA, idB)
{
var c;
c = sortable[idA].splice(a, 1);
sortable[idB].splice(b, 0, c);
}
</script>
- 1. Giao diện người dùng jQuery Sắp xếp được đặt theo cách thủ công một vị trí
- 2. Giao diện người dùng jQuery có thể sắp xếp: Di chuyển bản sao nhưng giữ nguyên
- 3. Giao diện người dùng jQuery có thể sắp xếp và có thể chọn
- 4. Giao diện người dùng Jquery kết hợp có thể sắp xếp và có thể kéo
- 5. Giao diện người dùng jQuery: có thể sắp xếp ('toArray') trả về một mảng trống
- 6. Giao diện người dùng Jquery, "vùng chết" với các portlet có thể sắp xếp
- 7. Cách sắp xếp theo thứ tự bảng chữ cái một giao diện người dùng JQuery có thể sắp xếp được?
- 8. Giao diện người dùng jQuery: Sắp xếp: Bản sao trình giữ chỗ của mục đang được sắp xếp
- 9. sắp xếp enum cho mục đích giao diện người dùng
- 10. Sắp xếp + danh sách lồng nhau với giao diện người dùng jQuery 1.8.2
- 11. Giao diện người dùng jQuery Sắp xếp, cách xác định vị trí hiện tại và vị trí mới trong sự kiện cập nhật?
- 12. Định vị hộp thoại Giao diện người dùng jQuery: điều chỉnh vị trí trên cùng 20px -
- 13. Vị trí số làm mới có thể sắp xếp của jQuery ui sắp xếp bên trong
- 14. Giao diện người dùng jQuery Sắp xếp: Cuộn toàn bộ trang cũng như vùng chứa
- 15. Giao diện người dùng jQuery Sắp xếp và: con trỏ chuột hoạt động để xử lý
- 16. Giao diện người dùng jQuery Sắp xếp sự kiện dừng sau khi kéo và thả
- 17. Làm thế nào để loại bỏ giao diện người dùng jQuery có thể sắp xếp từ một phần tử?
- 18. Vị trí Tự động Hoàn thành Giao diện Người dùng JQuery
- 19. cách hoàn nguyên vị trí của giao diện người dùng jquery có thể kéo được dựa trên điều kiện
- 20. Giao diện người dùng jQuery có thể kéo được với vị trí tuyệt đối và thuộc tính dưới cùng
- 21. Giao diện người dùng Jquery Có thể kéo được: Căn chỉnh trợ giúp đến vị trí chuột
- 22. JQuery UI sắp xếp trong một container cuộn - vị trí cuộn "nhảy" khi sắp xếp
- 23. Sắp xếp giao diện người dùng JQuery - Thêm trình giữ chỗ vào danh sách để mô phỏng không gian trống
- 24. Tải lên + Giao diện người dùng jQuery
- 25. Giao diện người dùng jQuery Kéo được, chụp vào lưới
- 26. Vị trí mục Jquery UI có thể sắp xếp trên sự kiện thay đổi
- 27. Giao diện người dùng JQuery Tabs caching
- 28. Giao diện người dùng jQuery không tải
- 29. Giao diện người dùng Kendo và giao diện người dùng jQuery - kích thước và khung javascript
- 30. Làm cho hàng của bảng hoạt động trở lên trong giao diện người dùng có thể sắp xếp
Là một lưu ý bổ sung, nếu bạn muốn theo dõi nơi mục xúc động đến từ (di chuyển từ vị trí 0 đến vị trí 2) sau đó bạn cần truy cập giá trị ui.item.index() trong sự kiện bắt đầu và lưu trữ giá trị đó. –
Có cách nào để tìm các portlet div-id có thể sắp xếp trong div #sortable không? – Frank
i_a đã làm những gì @David Boike đã viết: http://stackoverflow.com/a/12962399/114029 –