Ich benutze select2 version 4 mit mehreren Auswahl und ich unterstütze Benutzer neue Tags hinzufügen, aber ich möchte verhindern, dass Menschen ein neues Tag wählen, wenn dieses Tag bereits in meinem Backend existiert.Wie kann ich bei Verwendung des jquery select2-Plugins verhindern, dass neue Tags ausgewählt werden, wenn ein gültiger Wert des bereits aufgeführten Ajax-Aufrufs vorhanden ist?
Gerade jetzt, wenn ein Benutzer ein Tag gibt, das bereits existiert und ich habe Tags: true dann zeigt es zwei Elemente im Dropdown (das bestehende und das neue). Hier ein Beispiel:
wie Sie sehen können, „testTag2“ ist ein gültiger Tag von meinem Backend, so dass es bei der Auswahl zeigt sich aber wegen der templateResult Funktion und der Tatsache, dass Tags : true Es wird auch als zweites Element angezeigt (wodurch der Benutzer denkt, dass er es als neues Tag auswählen kann).
Gibt es trotzdem, nur die "NEUE" Tag-Auswahl in der Dropdown-Liste anzuzeigen, wenn dieser Text NICHT in der Dropdown-Liste als eine andere Option aufgeführt ist?
hier ist mein Javascript-Code:
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]";
}
}
kann es Ihnen möglich ist, eine Geige für diese zu schaffen? Wenn Ajax nicht möglich ist, reicht sogar ein einfaches Array von Daten aus. – vijayP