La excelente respuesta proporcionada por @fmpwizard funciona para Select2 3.5.2 y posteriores, pero no funcionará en 4.0.0 .
Desde muy temprano (pero tal vez no tan temprano como esta pregunta), Select2 ha admitido "etiquetado": donde los usuarios pueden agregar su propio valor si se lo permite. Esto se puede habilitar a través de la tags
opción, y puede jugar con un ejemplo en la documentación .
$("select").select2({
tags: true
});
Por defecto, esto creará una opción que tiene el mismo texto que el término de búsqueda que han ingresado. Puede modificar el objeto que se utiliza si desea marcarlo de una manera especial, o crear el objeto de forma remota una vez que se selecciona.
$("select").select2({
tags: true,
createTag: function (params) {
return {
id: params.term,
text: params.term,
newOption: true
}
}
});
Además de servir como un indicador fácil de detectar en el objeto pasado a través del select2:select
evento, la propiedad adicional también le permite representar la opción de manera ligeramente diferente en el resultado. Entonces, si desea señalar visualmente el hecho de que es una nueva opción al poner " (nuevo) " al lado, puede hacer algo como esto.
$("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;
}
});