Limite de Seleção
O recurso de limite de seleção permite controlar o número máximo de itens que podem ser selecionados em selects múltiplos. É útil para cenários onde você deseja limitar a quantidade de escolhas do usuário.
Limite de 3 Itens
Neste exemplo, o usuário pode selecionar no máximo 3 habilidades. Após atingir o limite, não será possível adicionar mais itens até que algum seja removido.
Ver código
HTML
<label for="skills">Selecione até 3 habilidades:</label>
<select id="skills" multiple>
<option value="javascript">JavaScript</option>
<option value="python">Python</option>
<option value="java">Java</option>
<option value="csharp">C#</option>
<option value="php">PHP</option>
<option value="ruby">Ruby</option>
<option value="go">Go</option>
<option value="rust">Rust</option>
<option value="swift">Swift</option>
<option value="kotlin">Kotlin</option>
</select>
JavaScript
new VanillaSmartSelectClass('#skills', {
searchable: true,
maximumSelectionLength: 3
});
Limite de 2 Itens
Exemplo com limite mais restritivo de apenas 2 frameworks. Útil quando você quer forçar o usuário a escolher suas principais preferências.
Ver código
HTML
<label for="frameworks">Selecione até 2 frameworks:</label>
<select id="frameworks" multiple>
<option value="react">React</option>
<option value="vue">Vue.js</option>
<option value="angular">Angular</option>
<option value="svelte">Svelte</option>
<option value="ember">Ember.js</option>
<option value="backbone">Backbone.js</option>
</select>
JavaScript
new VanillaSmartSelectClass('#frameworks', {
searchable: true,
maximumSelectionLength: 2
});
Limite de 5 Itens com Grupos
O limite de seleção funciona perfeitamente com optgroups. Neste exemplo, você pode selecionar até 5 países de diferentes continentes.
Ver código
HTML
<label for="countries">Selecione até 5 países:</label>
<select id="countries" multiple>
<optgroup label="América do Sul">
<option value="br">Brasil</option>
<option value="ar">Argentina</option>
<option value="cl">Chile</option>
<option value="co">Colômbia</option>
<option value="pe">Peru</option>
</optgroup>
<optgroup label="Europa">
<option value="pt">Portugal</option>
<option value="es">Espanha</option>
<option value="fr">França</option>
<option value="it">Itália</option>
<option value="de">Alemanha</option>
</optgroup>
<optgroup label="Ásia">
<option value="jp">Japão</option>
<option value="cn">China</option>
<option value="kr">Coreia do Sul</option>
<option value="in">Índia</option>
</optgroup>
</select>
JavaScript
new VanillaSmartSelectClass('#countries', {
searchable: true,
maximumSelectionLength: 5
});
Sem Limite (Padrão)
Por padrão, não há limite de seleção. Você pode definir explicitamente maximumSelectionLength: 0
ou simplesmente omitir a configuração para permitir seleção ilimitada.
Ver código
HTML
<label for="colors">Selecione quantas cores desejar:</label>
<select id="colors" multiple>
<option value="red">Vermelho</option>
<option value="blue">Azul</option>
<option value="green">Verde</option>
<option value="yellow">Amarelo</option>
<option value="purple">Roxo</option>
<option value="orange">Laranja</option>
<option value="pink">Rosa</option>
<option value="brown">Marrom</option>
<option value="black">Preto</option>
<option value="white">Branco</option>
</select>
JavaScript
new VanillaSmartSelectClass('#colors', {
searchable: true,
maximumSelectionLength: 0 // 0 = unlimited (default)
});
Monitorando Eventos de Limite
Você pode escutar o evento vs:selectionLimitReached para executar ações personalizadas
quando o limite é atingido. O evento fornece detalhes sobre o limite máximo e a mensagem exibida.
Ver código
HTML
<label for="tags">Selecione até 4 tags:</label>
<select id="tags" multiple>
<option value="tag1">Design</option>
<option value="tag2">Desenvolvimento</option>
<option value="tag3">Marketing</option>
<option value="tag4">Vendas</option>
<option value="tag5">Suporte</option>
<option value="tag6">Administração</option>
<option value="tag7">Recursos Humanos</option>
<option value="tag8">Financeiro</option>
</select>
<div id="event-log"></div>
JavaScript
const tagsElement = document.getElementById('tags');
const eventLog = document.getElementById('event-log');
new VanillaSmartSelectClass('#tags', {
searchable: true,
maximumSelectionLength: 4
});
// Listen to selection limit reached event
tagsElement.addEventListener('vs:selectionLimitReached', (e) => {
const timestamp = new Date().toLocaleTimeString();
const logEntry = document.createElement('div');
logEntry.style.marginBottom = '8px';
logEntry.innerHTML = `
<strong style="color: #856404;">[${timestamp}] Limite Atingido!</strong><br>
<span style="color: #666;">Máximo: ${e.detail.maximum} | Mensagem: "${e.detail.message}"</span>
`;
eventLog.insertBefore(logEntry, eventLog.firstChild);
});
// Also log select events
tagsElement.addEventListener('vs:select', (e) => {
const timestamp = new Date().toLocaleTimeString();
const logEntry = document.createElement('div');
logEntry.style.marginBottom = '8px';
logEntry.innerHTML = `
<strong style="color: #28a745;">[${timestamp}] Selecionado:</strong>
<span style="color: #666;">${e.detail.data.text}</span>
`;
eventLog.insertBefore(logEntry, eventLog.firstChild);
});
vs:selectionLimitReached contém
e.detail.maximum (número máximo permitido) e e.detail.message (mensagem exibida ao usuário).
Configuração da API
Configurações disponíveis para controle do limite de seleção:
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
maximumSelectionLength |
Number | 0 |
Número máximo de itens que podem ser selecionados. Use 0 para ilimitado. |
Eventos Relacionados
Eventos disparados durante o controle de limite de seleção:
| Evento | Descrição | Dados do Evento |
|---|---|---|
vs:selectionLimitReached |
Disparado quando o usuário tenta selecionar mais itens do que o limite permitido |
e.detail.maximum - número máximo permitidoe.detail.message - mensagem exibida
|
vs:select |
Disparado quando um item é selecionado (antes do limite ser atingido) |
e.detail.data - dados do item selecionado
|
vs:unselect |
Disparado quando um item é removido da seleção |
e.detail.data - dados do item removido
|
Personalização de Mensagens (i18n)
Você pode personalizar a mensagem exibida quando o limite é atingido através das configurações de internacionalização:
JavaScript
new VanillaSmartSelectClass('#element', {
maximumSelectionLength: 3,
language: {
maximumSelected: function(args) {
return 'Você só pode selecionar ' + args.maximum + ' itens';
}
}
});
// Ou usando texto simples
new VanillaSmartSelectClass('#element', {
maximumSelectionLength: 5,
language: {
maximumSelected: 'Limite de 5 itens atingido!'
}
});
language para adaptar mensagens
ao idioma do seu aplicativo. Veja a página de internacionalização
para mais detalhes.
Casos de Uso Comuns
- Formulários de Pesquisa: Limitar número de filtros ou categorias selecionadas
- Seleção de Skills: Pedir aos usuários que escolham suas principais competências (ex: top 3)
- Preferências: Limitar escolhas em configurações ou preferências do usuário
- Votação: Permitir voto em múltiplas opções até um limite específico
- Tags/Categorias: Evitar sobrecarga de tags em conteúdo ou produtos
- Alocação de Recursos: Limitar quantos recursos podem ser atribuídos a uma tarefa
Boas Práticas
- Comunique o Limite: Sempre informe o limite no label ou placeholder (ex: "Selecione até 3 itens")
- Feedback Visual: A biblioteca já fornece feedback, mas você pode adicionar estilos personalizados
- Eventos Customizados: Use
vs:selectionLimitReachedpara mostrar avisos ou sugestões adicionais - Limites Razoáveis: Escolha limites que façam sentido para o contexto (evite limites muito restritivos)
- Mensagens Claras: Personalize mensagens de erro para serem úteis e amigáveis
- Validação: Combine com validação de formulário para garantir que o mínimo também seja respeitado