A excelente resposta fornecida pelo @fmpwizard funciona para o Select2 3.5.2 e inferior, mas não funciona no 4.0.0 .
Desde muito cedo (mas talvez não tão cedo quanto essa pergunta), o Select2 oferece suporte à "marcação": onde os usuários podem adicionar seu próprio valor, se você permitir. Isso pode ser ativado através da tags
opção, e você pode brincar com um exemplo na documentação .
$("select").select2({
tags: true
});
Por padrão, isso criará uma opção que possui o mesmo texto que o termo de pesquisa que eles inseriram. Você pode modificar o objeto usado se estiver procurando marcá-lo de uma maneira especial ou criar o objeto remotamente depois que ele for selecionado.
$("select").select2({
tags: true,
createTag: function (params) {
return {
id: params.term,
text: params.term,
newOption: true
}
}
});
Além de servir como um sinalizador fácil de detectar no objeto transmitido pelo select2:select
evento, a propriedade extra também permite que você renderize a opção de maneira um pouco diferente no resultado. Portanto, se você deseja sinalizar visualmente o fato de que é uma nova opção colocando " (novo) " ao lado, você pode fazer algo assim.
$("select").select2({
tags: true,
createTag: function (params) {
return {
id: params.term,
text: params.term,
newOption: true
}
},
templateResult: function (data) {
var $result = $("<span></span>");
$result.text(data.text);
if (data.newOption) {
$result.append(" <em>(new)</em>");
}
return $result;
}
});