tắt trình đơn thả xuống do jquery chọn


88

Tôi có một div được chọn mà tôi đang sử dụng plugin jquery đã chọn để tạo kiểu và thêm các tính năng vào (đáng chú ý nhất là tìm kiếm). Div trông giống như thế này,

 <select data-placeholder="add a foobar" id="foobar" style="width: 350px;">
 <option value=""></option>
 </select>

Và tôi đang sử dụng plugin đã chọn như thế này,

 $('#foobar').chosen();

Trong khi một số AJAX đang tải, tôi muốn tắt toàn bộ <select>div. Có thể với một cái gì đó như thế này,

 $('#foobar').disable()

hoặc cái này

 $('#foobar').prop('disabled', true)

Tôi nghĩ rằng bạn có được ý tưởng.

Có ý tưởng nào để làm việc này không? Tôi đã thử một số cách khác nhau, chẳng hạn như sử dụng thành ngữ jquery để vô hiệu hóa mọi thứ, vô hiệu hóa <select>thứ chỉ vô hiệu hóa lựa chọn bên dưới chứ không phải những thứ đã chọn ở trên nó. Tôi thậm chí đã dùng đến cách thêm một div khác theo cách thủ công với giá trị cao z-indexđể chỉ làm xám hộp, nhưng tôi nghĩ rằng điều này có thể sẽ xấu và lỗi.

Cảm ơn đã giúp đỡ!

Câu trả lời:


150

Bạn chỉ đang tắt tùy chọn của mình select, nhưng được chọn sẽ hiển thị nó dưới dạng div và nhịp, v.v. Vì vậy, sau khi tắt lựa chọn của bạn, bạn cần cập nhật plugin để tắt tiện ích đã chọn. Bạn có thể thử cách này:

$('#foobar').prop('disabled', true).trigger("liszt:updated");

//For non-older versions of chosen you would want to do:

$('#foobar').prop('disabled', true).trigger("chosen:updated");

Tôi tìm thấy thông tin ở đây

Vĩ cầm

Khi bạn cập nhật tiện ích, tất cả những gì nó làm là bỏ liên kết nhấp chuột hoặc các sự kiện khác trên plugin và thay đổi độ mờ của nó thành 0,5. Vì không có trạng thái bị vô hiệu hóa thực sự cho một div.


Hình như có lỗi đánh máy liszt:updated, nó không phải là `list: updated?
lanoxx

1
lisztlà đúng, nhưng bây giờ chosen:updatedlà cách thích hợp để làm điều đó.
Kaleb Anderson

Đề xuất: Trước tiên, bạn có thể cần chỉ định phiên bản mới nhất của mã trong câu trả lời của mình vì nhiều người dùng sẽ sử dụng phiên bản mới nhất. Tôi đã sử dụng liszt:updatedvà không hoạt động vì nó không hoạt động trong các phiên bản mới.
May mắn

.trigger("chosen:updated");Nó cũng dùng để kích hoạt hoặc hủy kích hoạt, chẳng hạn như nếu bạn gọi lại nó trong một hàm.
Arenas V.

$ ('# tùy chọn foobar: not (: đã chọn)'). prop ('bị vô hiệu hóa', đúng) .trigger ("được chọn: đã cập nhật"); sẽ vô hiệu hóa các mục khác trong hộp kéo thả ngoại trừ mục đã chọn.
Asad Naeem

51

Trong phiên bản mới nhất được chọn, liszt:updatedkhông hoạt động nữa. Bạn cần sử dụng chosen:updated:

$(".chosen-select").attr('disabled', true).trigger("chosen:updated")

Đây là một JSFiddle .


7

PSL đã đúng, nhưng đã chọn đã được cập nhật kể từ đó.

Đặt cái này sau khi bạn tắt:

$("#your-select").trigger("chosen:updated");

6
$('#foobar').prop('disabled', true).trigger("chosen:updated");

Điều này hoạt động hoàn hảo !!!! @chosen v1.3.0


1

Bạn có thể thử điều này:

$("#foobar").prop('disabled',true).trigger("chosen:updated").chosen('destroy').chosen()


0
$(document).ready(function () {
    $("#foobar").chosen().on('chosen:showing_dropdown',function() {
            $('.chosen-select').attr('disabled', true).trigger('chosen:updated');
            $('.chosen-select').attr('disabled', false).trigger('chosen:updated');
            $('.search-choice-close').hide();
    });
    $('.search-choice-close').hide();
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.