2012-07-22 23 views
17

Cách kiểm tra xem một danh sách cụ thể có thể sắp xếp được không? Giống như $('#list').is(':sortable') ...?Cách kiểm tra xem danh sách có thể sắp xếp được không?

Nếu chúng ta sẽ sử dụng

if ($('#list').sortable()) 

sau đó danh sách sẽ được thực hiện sắp xếp được một lần nữa và không kiểm tra nếu thực sự nó là sắp xếp.

+1

Bản sao có thể có của [Tìm các thành phần có tiện ích con được khởi chạy trên chúng] (http://stackoverflow.com/questions/11251765/find- các phần tử-mà-có-jquery-widgets-được khởi tạo-khi-chúng). Chỉ cần sử dụng 'data (" sortable ")' thay vì 'data (" fileupload ")'. –

Trả lời

38

Nếu danh sách đã được sắp xếp, thì danh sách phải có lớp ui-sortable.

Bạn có thể sử dụng if ($('#list').hasClass('ui-sortable')) để kiểm tra.

+0

Nó không hoạt động nếu trang được tải lại từ db nơi html đã được lưu với lớp đính kèm. Tuy nhiên, phương thức do jebbie đề xuất là hoàn hảo khi tải lại các trang từ db. – arkoak

1

Khi áp dụng phân loại, chỉ cần thêm một lớp giả để mà yếu tố như thế này,

$("#sortable").sortable(); 
$("#sortable").addClass("antguider"); 

sau đó, Nếu bạn muốn kiểm tra phần tử là sắp xếp được thì kiểm tra như thế này,

if($("#sortable").hasClass("antguider")){ 
    alert("Already Sort Applied"); 
} 
+2

Tại sao thêm một lớp không cần thiết thêm khi tiện ích có thể sắp xếp đã thêm lớp 'ui-sắp xếp'? –

+1

Nếu bất kỳ phiên bản tương lai nào có thể sắp xếp có thể sắp xếp thay đổi tên lớp, giải pháp này sẽ vẫn hoạt động. – Asaf

+0

thay vì sử dụng lớp của riêng tôi, tôi muốn làm cho lớp tôi kiểm tra với cấu hình và nếu nó thay đổi, tôi chỉ thay đổi cấu hình và bam, hoạt động lại .. không bao giờ tái phát minh ra bánh xe, đánh dấu đơn giản gọn gàng luôn là mục tiêu – jebbie

10

tôi vừa phát hiện ra, với giao diện dữ liệu, nó cũng đang hoạt động:

if ($('#sortable').data('sortable')) { 
    // sortable instance exists 
} 
+2

nhưng tôi phải nói ...tôi tin vào phiên bản jQuery mới nhất, điều này không hoạt động nữa (tôi đã phải thay đổi tất cả các trường hợp mã trong dự án mới nhất của tôi thành css-class-detection) – jebbie

+0

Cảm ơn điều này làm việc cho tôi. –

2

Tôi tìm thấy trong Safari (có thể khác) t các lớp học của anh ấy không đáng tin cậy. 'ui-sortable' vẫn còn trên bất kỳ mục nào đã được thực hiện có thể sắp xếp ngay cả khi bạn vô hiệu hóa nó, điều này dẫn đến việc sử dụng cả hai loại 'ui-sortable ui-sortable-disabled'.

Tôi thấy mình tự thêm và xóa các lớp học chỉ để đảm bảo chúng giống như tôi mong đợi.

if ($(this).hasClass("ui-sortable")) { 
    $(this).removeClass("ui-sortable"); 
    $(this).sortable({ disabled: true }); 
} 
else { 
    $(this).addClass("ui-sortable"); 
    $(this).sortable({ disabled: false }); 
} 

- EDIT

Ok, vì vậy các lớp học là đáng tin cậy nhưng những gì tôi là sau khi không phải là người khuyết tật mà là .sortable ("phá hủy") trả về các yếu tố để nó nhà nước trước khi khởi động (ví dụ: loại bỏ tất cả các lớp trợ giúp).

Vì vậy, cho chuyển đổi sắp xếp được tôi (đó là những gì tôi đã tạo ra):

if ($(this).hasClass("ui-sortable")) $(this).sortable("destroy"); 
else $(this).sortable(); 
6

Có một sự thay đổi trong jQuery Version sau năm 2012, vì vậy bây giờ bạn có thể viết:

if ($('#sortable').data('ui-sortable')) { 
    // sortable instance exists 
} 

hoặc

if ($('#sortable').is(':ui-sortable')) { 
    // sortable instance exists 
} 
Các vấn đề liên quan