2015-01-17 11 views
5

Tôi đang cố tạo danh sách có thể chọn với dấu ngoặc đơn gốc/con/cháu. Xin vui lòng xem bên dưới:JqueryUI Có thể chọn - không chọn mà không cần Ctrl

http://jsfiddle.net/Lmsop4k7/

$('#theParentList').selectable({ 
    filter: 'li div', 
    selected: function (event, ui) { 
     var selectedText = $(ui.selected).text(); 
     $("#selectedNode").text(selectedText); 

     if ($(ui.selected).hasClass('selectedfilter')) { 
      $(ui.selected).removeClass('selectedfilter'); 
     }    
    } 
}); 

Nhưng, tôi đang gặp rất nhiều vấn đề đến với chức năng "bỏ chọn" (ví dụ mà không cần phải bấm phím Ctrl). Tôi cũng không muốn "liên kết" Ctrl tự động để di chuột xuống (được mô tả trong một số giải pháp khác), b/c Tôi chỉ muốn một mục được chọn cùng một lúc. Ngoài ra, tôi chỉ muốn hiểu cách thực hiện luồng kiểm soát để bỏ chọn các sự kiện (ví dụ: "đã chọn:").

Tôi đang làm gì sai ở đây? Như bạn có thể thấy, lựa chọn được chọn chính xác vì hộp văn bản được cập nhật chính xác với văn bản chính xác. Tuy nhiên, khi tôi nhấp vào một mục đã được nhấp để "bỏ chọn" (không giữ phím Ctrl), nó không bỏ chọn. Tôi hình ngay cả trong tình huống này, một sự kiện "được chọn" được kích hoạt - nhưng rõ ràng có điều gì đó sai với mã "đã chọn" của tôi. Rất bực bội ..

Cảm ơn mọi người.

+0

Câu hỏi thứ hai: với giải pháp này http://stackoverflow.com/a/11419341/1861097 bạn có thể nhận được số lượng và sau đó bạn có thể sử dụng ví dụ. '.css (" margin-left ", level * 5 +" px ")' – Johncze

Trả lời

1

Vì vậy, tôi fiddled với nó hơn một chút, và tìm thấy những gì tôi cần. Vui lòng xem bên dưới. Đã thêm văn bản gỡ lỗi, trong trường hợp có thể hữu ích cho người nào đó sau này. Tôi sẽ tạo một chủ đề khác cho "câu hỏi phụ" của tôi về thụt đầu dòng. Cảm ơn mọi người.

http://jsfiddle.net/bgfn3091/2/

$('#theParentList').selectable({ 
     filter: 'li div', 
     selected: function (event, ui) { 
      var selectedText = $(ui.selected).text(); 
      $("#selectedNode").text(selectedText); 

      $(ui.selected).removeClass('ui.selected'); 

      $("#debugText").text("Selected");    

      if ($(ui.selected).hasClass('alreadySelected')) { // clicking to de-select 
       $('#theParentList .alreadySelected').removeClass('alreadySelected'); 
       $(ui.selected).removeClass('ui-selected'); 

       $("#debugText").text("alreadySelected is present and removed");         
      } 
      else // clicking to select 
      { 
       $('#theParentList .alreadySelected').removeClass('alreadySelected'); 
       $(ui.selected).addClass('alreadySelected'); // add to just this element 

       $("#debugText").text("alreadySelected added");              
      } 
     } 
    }); 
1

Hãy thử

// utilize `dblclick` event to remove selected class 
$(".ui-selected").one("dblclick", function(e) { 
    $(e.target).removeClass("ui-selected") 
}); 

http://jsfiddle.net/Lmsop4k7/3/

+0

Cảm ơn người đàn ông. Nhưng, tôi đã tìm kiếm một câu trả lời chỉ cho một nhấp chuột duy nhất. Vui lòng xem bên dưới. Đã cho bạn +1. – Phoeniyx

1

Dưới đây là của tôi:

http://jsfiddle.net/carlcarl/Lmsop4k7/4/

Bạn có thể kéo chọn/bỏ chọn mà không cần báo Ctrl.

Trong lựa chọn/bỏ chọn, nếu tất cả những gì bạn đã chọn được chọn trước đó, hãy đặt hành động này là không chọn. Nếu nhiều hơn một không được chọn trước đó, hãy đặt hành động này làm lựa chọn.

+0

Làm tốt lắm! Tôi nhận thấy rằng giai đoạn "bỏ chọn" cho bạn đau buồn, sao chép, chọn một hình vuông, sau đó kéo để bỏ chọn một phần nhưng trước khi bạn thả nút chuột trở về nguồn gốc của nó, mọi thứ đã được chạm sẽ bị bỏ chọn. Đến nay việc thực hiện tốt nhất này tôi đã thấy mặc dù, công việc tốt đẹp. –

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