oziSelect
Versión: 5.0.0 — Actualizado: 2026-05-27
Descripción
Plugin de selección personalizada para interfaces web, desarrollado para reemplazar los selects tradicionales por una experiencia más rica, visual y flexible. Permite trabajar con selección simple o múltiple, mostrar elementos con imagen, texto o HTML personalizado, organizar opciones por grupos e integrar la selección directamente con formularios mediante campos hidden generados automáticamente a partir de cualquier campo presente en el JSON de opciones.
Ofrece soporte para búsqueda local y búsqueda remota, posibilitando filtrar opciones existentes en el navegador o consultar nuevos resultados en el servidor mientras el usuario escribe. Recomendado para escenarios donde un select estándar no ofrece suficiente flexibilidad — como listas con imágenes, selecciones múltiples con etiquetas visuales, agrupamiento de opciones y carga dinámica vía AJAX.
Ejemplos
[1] Selección simple
<div data-ozi-select="comunidades"></div>
<script type="application/json" data-ozi-select-options="comunidades">
[
{ "value": "AND", "label": "Andalucía" },
{ "value": "CAT", "label": "Cataluña" },
{ "value": "MAD", "label": "Madrid" }
]
</script>
[2] Con iconos
Usa data-ozi-select-value-icon y data-ozi-select-search-icon con cualquier biblioteca de iconos.
<div
data-ozi-select="comunidades"
data-ozi-select-value-placeholder="Selecciona una comunidad..."
data-ozi-select-value-icon="bi bi-geo-alt"
data-ozi-select-search-placeholder="Buscar..."
data-ozi-select-search-icon="bi bi-search">
</div>
[3] Con imagen
Usa el campo image en el JSON para mostrar imágenes en las opciones, preview y etiquetas.
<div
data-ozi-select="paises"
data-ozi-select-value-placeholder="Selecciona un país..."
data-ozi-select-value-icon="bi bi-globe"
data-ozi-select-search-icon="bi bi-search"
data-ozi-select-list="150px">
</div>
<script type="application/json" data-ozi-select-options="paises">
[
{ "value": "MX", "label": "México", "labelHtml": "Américas", "image": "/image/flags/mx.jpg" },
{ "value": "ES", "label": "España", "labelHtml": "Europa", "image": "/image/flags/es.jpg" }
]
</script>
[4] Selección múltiple
<div
data-ozi-select="comunidades"
data-ozi-select-multiple
data-ozi-select-value-placeholder="Selecciona comunidades..."
data-ozi-select-value-icon="bi bi-geo-alt"
data-ozi-select-search-icon="bi bi-search"
data-ozi-select-list="150px">
</div>
<script type="application/json" data-ozi-select-options="comunidades">
[
{ "value": "CAT", "label": "Cataluña", "labelHtml": "Este" },
{ "value": "MAD", "label": "Madrid", "labelHtml": "Centro" }
]
</script>
[5] Múltiple con grupos
Usa el campo group en el JSON para organizar las opciones en grupos visuales.
<div
data-ozi-select="comunidades"
data-ozi-select-multiple
data-ozi-select-list="220px">
</div>
<script type="application/json" data-ozi-select-options="comunidades">
[
{ "value": "PVA", "label": "País Vasco", "group": "Norte" },
{ "value": "CAT", "label": "Cataluña", "group": "Este" },
{ "value": "MAD", "label": "Madrid", "group": "Centro" }
]
</script>
[6] Seleccionar todos por grupo
Usa data-ozi-select-multiple-group — haz clic en el grupo para seleccionar o eliminar todos los elementos a la vez.
<div
data-ozi-select="comunidades"
data-ozi-select-multiple-group
data-ozi-select-list="220px"
data-ozi-select-required>
</div>
[7] Búsqueda remota — mínimo
Usa data-ozi-select-zld-url para buscar opciones vía AJAX. El JSON inicial está vacío.
<div
data-ozi-select="comunidades"
data-ozi-select-multiple-group
data-ozi-select-zld-url="/api/comunidades">
</div>
<script type="application/json" data-ozi-select-options="comunidades">[]</script>
[8] Búsqueda remota — completa
POST con parámetros extra, imágenes, delay y log activado.
<div
data-ozi-select="comunidades"
data-ozi-select-multiple-group
data-ozi-select-value-placeholder="Selecciona comunidades..."
data-ozi-select-image-dimension="50px,40px"
data-ozi-select-zld-url="/api/comunidades/buscar"
data-ozi-select-zld-method="POST"
data-ozi-select-zld-param="search"
data-ozi-select-zld-item-name="empresa_id:15, estado:activo"
data-ozi-select-zld-min="1"
data-ozi-select-zld-delay="0"
data-ozi-select-zld-log="true">
</div>
<script type="application/json" data-ozi-select-options="comunidades">[]</script>
Características
- Selección simple o múltiple — con etiquetas visuales en modo múltiple
- Iconos personalizables —
value-iconysearch-iconcon cualquier biblioteca - HTML personalizado — muestra imágenes, subLabel o HTML en opciones y preview
- Agrupamiento de opciones — campo
groupen JSON organiza visualmente - Seleccionar por grupo —
multiple-groupselecciona/elimina todos de un grupo - Búsqueda local — filtra opciones ya cargadas en el navegador
- Búsqueda remota — consulta el servidor vía AJAX mientras el usuario escribe
- Hidden inputs automáticos — cualquier campo JSON se convierte en input hidden
- Validación — soporte de campo obligatorio con mensaje personalizado
- API pública completa — get, set, open, close, enable, disable y más
Atributos HTML
NUEVA CARACTERÍSTICA
-
data-ozi-select-as→ mapea campos del JSON externo a los nombres canónicos del plugin (value,label,image, etc.), permitiendo consumir cualquier API sin transformar los datos en el backend.- Formato:
"canónico=alias, canónico=alias" - Ejemplo:
data-ozi-select-as="value=codigo, label=nombre, group=region"
- Formato:
[1] Identificación
| Atributo | Descripción |
|---|---|
data-ozi-select |
Clave única de la instancia — vincula el elemento al JSON de opciones |
[2] Datos JSON — Campos de las Opciones
| Campo | Requerido | Descripción |
|---|---|---|
value |
✔ | Valor interno de la opción |
label |
✔ | Texto o HTML mostrado en la lista, preview y etiquetas |
subLabel |
— | Texto secundario mostrado debajo del label |
image |
— | Imagen mostrada en la opción, preview y etiqueta |
group |
— | Grupo visual de la opción |
selected |
— | true/false — selección inicial |
optionHtml |
— | HTML completo de la opción — reemplaza el diseño por defecto |
optionClass |
— | Clase CSS extra aplicada al elemento de la opción |
campo libre |
— | Cualquier campo extra genera automáticamente un input hidden |
[3] Modo de Selección
| Atributo | Descripción |
|---|---|
data-ozi-select-multiple |
Activa selección múltiple con etiquetas visuales |
data-ozi-select-multiple-group |
Selección múltiple con control por grupo |
[4] Placeholders y Visual
| Atributo | Descripción |
|---|---|
data-ozi-select-value-placeholder |
Texto mostrado cuando no hay elemento seleccionado |
data-ozi-select-value-icon |
Icono a la izquierda del valor — ej: bi bi-geo-alt |
data-ozi-select-search-placeholder |
Placeholder del campo de búsqueda interno |
data-ozi-select-search-icon |
Icono a la izquierda del campo de búsqueda — ej: bi bi-search |
data-ozi-select-list |
Altura máxima de la lista de opciones — ej: 150px |
data-ozi-select-image-dimension |
Dimensiones de las imágenes en formato ancho,alto — ej: 32px,32px |
[5] Envío de Datos
| Atributo | Descripción |
|---|---|
data-ozi-select-submit-name |
Nombre base de los inputs hidden generados — por defecto: clave de data-ozi-select |
data-ozi-select-submit-fields |
Modo legado — mapea campos en formato origen:destino |
[6] Estado y Validación
| Atributo | Descripción |
|---|---|
data-ozi-select-disabled |
Deshabilita el componente |
data-ozi-select-required |
Define el campo como obligatorio |
data-ozi-select-required-message |
Mensaje de validación personalizado |
[7] Búsqueda Remota
| Atributo | Por defecto | Descripción |
|---|---|---|
data-ozi-select-zld-url |
— | URL para búsqueda remota vía AJAX |
data-ozi-select-zld-method |
POST |
Método: GET o POST |
data-ozi-select-zld-param |
search |
Nombre del parámetro enviado con el texto escrito |
data-ozi-select-zld-item-name |
— | Parámetros extra — campo del formulario o clave:valor |
data-ozi-select-zld-min |
1 |
Mínimo de caracteres para disparar la búsqueda |
data-ozi-select-zld-delay |
300 |
Retardo en ms antes de ejecutar la búsqueda |
data-ozi-select-zld-log |
— | Activa logs de depuración en la consola |
API Pública
| Método | Descripción |
|---|---|
OziSelect.init(selector?) |
Inicializa instancias |
OziSelect.get(key) |
Retorna la instancia |
OziSelect.value(key, newValue?) |
Getter/setter del valor |
OziSelect.items(key) |
Retorna array de elementos seleccionados |
OziSelect.clear(key) |
Limpia la selección |
OziSelect.open(key) |
Abre el dropdown |
OziSelect.close(key) |
Cierra el dropdown |
OziSelect.enable(key) |
Habilita el componente |
OziSelect.disable(key) |
Deshabilita el componente |
OziSelect.required(key, state?) |
Getter/setter del estado obligatorio |
OziSelect.reload(key) |
Reconstruye la instancia |
OziSelect.destroy(key) |
Destruye la instancia |
Evento ozi:change
$('[data-ozi-select="comunidades"]').on('ozi:change', function(e, items, instance, detail) {
console.log(detail.value); // valor seleccionado
console.log(detail.items); // array de elementos seleccionados
});