Tôi đang sử dụng select2 version 4 với nhiều lựa chọn và tôi hỗ trợ người dùng thêm thẻ mới nhưng tôi muốn ngăn mọi người chọn thẻ mới nếu thẻ đó đã tồn tại trên chương trình phụ trợ của tôi.Khi sử dụng plugin jquery select2, làm cách nào để ngăn các thẻ mới được chọn nếu có giá trị hợp lệ từ cuộc gọi ajax đã được liệt kê?
Ngay bây giờ nếu người dùng nhập thẻ đã tồn tại và tôi có các thẻ : true thì thẻ sẽ hiển thị hai mục trong trình đơn thả xuống (thẻ hiện tại và thẻ mới). Dưới đây là một ví dụ:
như bạn có thể thấy, "testTag2" là một thẻ hợp lệ từ backend của tôi vì vậy nó xuất hiện trong việc lựa chọn nhưng vì templateResult chức năng và thực tế là thẻ : true nó cũng hiển thị dưới dạng mục thứ hai (khiến người dùng nghĩ rằng họ có thể chọn nó làm thẻ mới).
Có cách nào để chỉ hiển thị lựa chọn thẻ "MỚI" trong menu thả xuống không, nếu văn bản đó KHÔNG được liệt kê trong menu thả xuống dưới dạng tùy chọn khác?
đây là mã javascript của tôi:
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 . . . <img src='/Content/Images/ajax-loader.gif' />";
} else {
if (tag.name) {
var existsAlready = $("#Tags option[value='" + tag.id + "']").length > 0;
if (existsAlready) {
return null;
}
return tag.name;
}
var length = $('#tagsContainer .select2-selection__choice').filter(function() {
return $(this).attr("title").toUpperCase() === person.text.toUpperCase();
}).length;
if (length == 1) {
return null;
}
return tag.text + " [NEW]";
}
}
nó có thể là có thể cho bạn để tạo ra một fiddle cho việc này? Nếu Ajax là không thể thì ngay cả mảng dữ liệu đơn giản cũng đủ tốt. – vijayP