2011-11-07 32 views
6

Tôi có một sắp xếp được như ví dụ thứ 2 trên trang này:Thay đổi hành vi sắp xếp cho jquery sắp xếp được

http://jqueryui.com/demos/sortable/items.html

Các sắp xếp được là một kết hợp của các mục tiêu:

  • Những người có thể được nhặt và sắp xếp lại
  • Các mục bị vô hiệu hóa, không thể nhận được (nhưng là mục tiêu thả).

Vấn đề là cách thức thành phần diễn giải ý định sắp xếp của tôi. Như một ví dụ nhặt phần tử đầu tiên của danh sách sau đây và kéo nó đến vị trí thứ tư sẽ trông như thế này:

A B C X X ==> B C X A X

đây của X biểu thị các mục tàn tật.

Trong đơn đăng ký của tôi, tôi muốn hành vi sắp xếp khác nhau. Khi một mục tiêu được chọn và được đặt trên một mục bị vô hiệu hóa (X) thì danh sách sẽ không thay đổi theo để chứa mục tiêu, nhưng thay vào đó mục tiêu và mục bị vô hiệu hóa sẽ hoán đổi vị trí.

Sử dụng ví dụ tương tự như trước (kéo từ 1 đến 4):

ABCXX ==> XBCAX

Nếu mục tiêu thả là chuyện bình thường (tức là không vô hiệu hóa) hành vi nên giống như trước (kéo từ 1 đến 3):

ABCXX ==> BCAXX

nghĩ về nó như muốn sắp xếp các cuộc hẹn trên lịch, khi bạn nhấc lên dẫn trước từ một ngày và thả nó vào một ngày rỗng , bạn sẽ không muốn các cuộc hẹn khác để xáo trộn cùng một ngày.

+0

Hình như http://stackoverflow.com/questions/2263687/jquery-sortable-obtain-2-elements-being-swapped – sirhc

Trả lời

2

Tôi đã đặt cùng một jsfiddle với chức năng mong muốn của bạn.

Về cơ bản, tôi liên kết với chức năng thay đổi có thể sắp xếp và tôi kiểm tra xem phần tử trợ giúp vừa qua đã bị tắt chưa. Nếu đó là sau đó tôi di chuyển yếu tố đó đến nơi người trợ giúp bắt đầu.

Đây là jsfiddle http://jsfiddle.net/YjhzR/3/

Hy vọng điều này sẽ hữu ích!

Cập nhật:

http://jsfiddle.net/YjhzR/6/

+1

Nếu đây là những gì OP muốn (Tôi vẫn không chắc chắn chính xác những gì là) thì xin chúc mừng, bạn xứng đáng được thưởng :) Mặt khác - khi Tôi đã sử dụng fiddle của bạn, X1 biến mất khi tôi cố gắng để đặt một cái gì đó bên cạnh nó và OP cho thấy số lượng tùy chọn liên tục trong ví dụ của mình. – naugtur

+0

Tôi không hiểu 2 câu của bạn "X1 biến mất khi tôi cố gắng đặt một cái gì đó bên cạnh nó". Bạn chỉ có thể di chuyển các phần tử ở trên hoặc bên dưới một phần tử khác trong fiddle của tôi. Và "OP cho thấy số lượng tùy chọn liên tục trong ví dụ của mình" –

+1

Điều này trông rất hứa hẹn, mặc dù tôi cũng thấy một cái gì đó tương tự như naugtur. Về cơ bản, nếu bạn kéo C trên X1, thì X1 biến mất, kết quả là A B C, khi kết quả là A B X1 C. Nhìn chung, nó có vẻ vỡ khi bạn cố trao đổi hai mục liền kề khi một trong số đó là X1. Rất cám ơn cho mã mặc dù, ngay cả hiện tại điều này là rất hữu ích như là một sự khởi đầu - nếu bạn có thể sửa chữa các lỗi, tiền thưởng là của bạn! – pheelicks

5

Điều này sẽ không chính xác là câu trả lời cho câu hỏi của bạn, nhưng tôi nghĩ bạn không nên sử dụng giải pháp sẵn sàng khi nó không phù hợp với trường hợp.

Tôi nghĩ bạn nên tạo quyền kiểm soát của riêng mình để giữ nguyên các phần tử và sử dụng các hình kéo có khả năng thực hiện của jquery-ui để thực hiện hành vi. Usecase của bạn khác với ví dụ trong một số logic cơ bản về hành vi.

Sẽ có lợi cho tương lai, nếu bạn nhận được nhiều yêu cầu hơn.

+0

Tôi đồng ý với bạn ở không ép buộc một giải pháp đã sẵn sàng để làm một cái gì đó mà nó không được thiết kế để làm. Nhưng, không phải là một chuyên gia jquery tôi đã tò mò muốn xem liệu có một "cách tốt đẹp" để thay đổi chỉ logic phân loại. Liên kết của Sirhc trông giống như một điểm khởi đầu đầy hứa hẹn cho việc tạo ra một điều khiển tùy chỉnh – pheelicks

+0

Tôi vẫn nghĩ rằng sẽ có nhiều việc phải làm hơn như bạn đã lên kế hoạch. Vui lòng báo cáo lại những gì bạn đã làm và nếu bạn thành công. – naugtur

+0

Trong khi Keith đã cung cấp một giải pháp hợp lệ cho câu hỏi của tôi, sau khi chơi với nó một chút, nó chỉ ra rằng đây thực sự là một cách khá khó hiểu của sắp xếp lại một danh sách. Như vậy, tôi có thể sẽ đi với các plugin Swappable đề nghị của sirhc – pheelicks

Các vấn đề liên quan