Sto migrando su select2 to use as a tagging plugin da un altro plug-in, ma c'è una lacuna che sto cercando di capire se select2 può supportare.Con plug-in jquery select2 con tag: true, come è possibile evitare che le scelte vengano visualizzate nel menu a discesa che sono già selezionate?
Lasciate guardare un esempio. Diciamo che la mia lista di scelte (provenienti retro server dalla richiesta Ajax) è
"Dog", "Cat", "Monkey", "Giraffe"
Nel vecchio plug-sto usando, dopo scelgo una delle scelte (diciamo "Cat") e si presenta in la casella di testo, la prossima volta che cerco la stessa stringa parziale (diciamo "Ca"), DOESN "T have" Cat "appare nel menu a discesa delle scelte (poiché sa che l'hai già scelto in precedenza)
Sembra che select2 mostri ancora l'elemento nel menu a discesa durante la ricerca, indipendentemente dal fatto che lo abbia già selezionato. Select2 impedisce di entrare se dopo aver premuto invio ma sembra un po 'non intuitivo, quindi sto cercando di capire se c'è un modo per select2 replicare lo stesso comportamento ior dell'altro plug-in (dove le scelte non vengono nemmeno visualizzate)
Un altro esempio di questo funziona correttamente, anche la sezione del tag stackoverflow di una domanda fa la cosa giusta. Se aggiungo "jquery" alla mia lista di tag per questa domanda e poi cerco di nuovo "jquery", è DOESN "T mostra che nella lista (come è già stato scelto) .Questo è il comportamento che sto cercando per
Ecco il mio codice select2 corrente:.
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;
}
Penso che in qualche modo nella funzione templateResult esiste un modo per restituire false o qualcosa per non mostrare quell'elemento se è già selezionato. E 'qualcosa di simile a questo possibile (non riesce a trovare nulla in linea o nella documentazione)
sai cosa differenza tra un matcher personalizzato e il ritorno di null nella funzione templateResult? – leora
@leora Ho esaminato i documenti e ho fatto un po 'di debug, entrambe sono opzioni praticabili in quanto offrono funzionalità un po' duplicate. Dai documenti: _ "[Select2 usa il]' matcher' per determinare se [ogni risultato] deve essere visualizzato. "_ _" Il 'templateResult' può anche restituire' null', che impedirà la visualizzazione dell'opzione nel lista dei risultati. "_ Così come puoi vedere, permettono all'utente di fare la stessa cosa attraverso percorsi diversi. Perché la libreria è stata progettata in questo modo non è troppo chiara, ma il motivo è probabilmente la facilità d'uso se si desidera modificare l'uno o l'altro in piccoli dettagli. – Nit
Grazie per il seguito – leora