Tôi đang di chuyển sang select2 to use as a tagging plugin từ một plugin khác nhưng có một khoảng trống mà tôi đang cố gắng tìm ra nếu select2 có thể hỗ trợ.Với plugin jquery select2 có thẻ: đúng, bạn có thể ngăn các lựa chọn hiển thị trong trình đơn thả xuống đã được chọn như thế nào?
Hãy xem ví dụ. Cho phép nói rằng danh sách các lựa chọn (quay trở lại phía máy chủ từ yêu cầu Ajax) là
"Dog", "Cat", "Monkey", "Giraffe"
Trong plugin cũ Tôi đang sử dụng, sau khi tôi chọn một trong những lựa chọn (cho phép nói "Cát") và nó xuất hiện trong hộp văn bản, lần sau tôi tìm kiếm cùng một chuỗi (cho phép nói "Ca"), nó KHÔNG "T có" Cat "hiển thị trong danh sách lựa chọn (vì nó biết rằng trước đó bạn đã chọn nó)
Có vẻ như select2 vẫn hiển thị mục trong trình đơn thả xuống khi tìm kiếm bất kể bạn đã chọn nó chưa. Chọn 2 không ngăn nhập nếu sau khi bạn nhấn enter nhưng điều này có vẻ hơi khó hiểu vì vậy tôi đang cố gắng tìm hiểu xem có cách nào không để select2 nhân rộng cùng một hành vi ior từ các plugin khác (nơi các lựa chọn thậm chí không hiển thị)
Một ví dụ khác về cách này hoạt động đúng cách, phần thẻ stackoverflow của câu hỏi cũng làm đúng. Nếu tôi thêm "jquery" vào danh sách các thẻ cho câu hỏi này và sau đó tìm kiếm "jquery" một lần nữa, nó DOESN "T cho thấy rằng trong danh sách (như đã được chọn). Đó là hành vi mà tôi đang tìm kiếm cho
đây là mã Select2 hiện tại của tôi:.
HTML:
<select id="Tags" name="Tags" multiple="multiple">
</select>
Javascript:
function SetupAppTags() {
$("#Tags").select2({
theme: "classic",
width: "98%",
tags: true,
ajax: {
url: "/Tag/Search",
dataType: 'json',
delay: 300,
data: function(params) {
return { q: params.term };
},
processResults: function(data, params) {
return { results: data };
},
cache: false
},
escapeMarkup: function(markup) { return markup; },
minimumInputLength: 3,
templateResult: tagFormatResult,
templateSelection: tagSelectionResult
});
}
function tagFormatResult(tag) {
if (tag.loading) {
return "Loading . . .";
} else {
if (tag.name) {
return tag.name;
}
return tag.text + " [NEW]";
}
}
function tagSelectionResult(tag) {
if (tag.name) {
return tag.name;
}
return tag.text;
}
Tôi nghĩ rằng bằng cách nào đó trong hàm templateResult có một cách để trả về false hoặc một cái gì đó không hiển thị mục đó nếu nó đã được chọn. Là một cái gì đó như thế này có thể (không thể tìm thấy bất cứ điều gì trên mạng hoặc trong các tài liệu)
bạn có biết khác nhau giữa một matcher tùy chỉnh so với null trả về trong hàm templateResult? – leora
@leora Tôi đã xem qua các tài liệu và đã thực hiện một số gỡ lỗi, cả hai đều là các tùy chọn khả thi khi chúng cung cấp chức năng trùng lặp đôi chút. Từ các tài liệu: _ "[Select2 sử dụng]' matcher' để xác định xem [mỗi kết quả] sẽ được hiển thị. "_ _" 'TemplateResult' cũng có thể trả về' null', điều này sẽ ngăn chặn tùy chọn hiển thị trong danh sách kết quả. "_ Như bạn có thể thấy, chúng cho phép người dùng thực hiện tương tự thông qua các tuyến đường khác nhau. Tại sao thư viện được thiết kế như thế này không phải là quá rõ ràng, nhưng lý do có lẽ là dễ sử dụng nếu bạn chỉ muốn thay đổi một hoặc khác trong các chi tiết nhỏ. – Nit
Cảm ơn bạn đã theo dõi – leora