Sobre este problema HTML
Em HTML, os atributos booleanos funcionam de forma diferente do que você pode esperar de linguagens de programação. A presença de um atributo booleano num elemento representa o valor true, e a sua ausência representa false. Você não os define como "true" ou "false" como faria em JavaScript ou outras linguagens. De acordo com a especificação HTML do WHATWG, um atributo booleano tem exatamente três formas válidas:
-
Apenas o nome do atributo (ex.,
multiple) -
O atributo com um valor vazio (ex.,
multiple="") -
O atributo com um valor que corresponde ao seu próprio nome, sem distinção de maiúsculas/minúsculas (ex.,
multiple="multiple")
Definir multiple="true" é inválido porque "true" não é um dos valores permitidos. Embora os browsers sejam tolerantes e tipicamente ainda tratem o atributo como presente (efetivamente ativando-o), isto produz um erro de validação W3C e não está conforme o padrão HTML. Depender da tolerância do browser leva a comportamentos inconsistentes, torna o seu código mais difícil de manter, e pode causar problemas com ferramentas de processamento HTML ou analisadores rigorosos.
Esta mesma regra aplica-se a todos os atributos booleanos em HTML, incluindo disabled, readonly, checked, required, hidden, autoplay, e muitos outros.
É também importante notar que multiple="false" não desativa o atributo. Porque o atributo ainda está presente no elemento, o browser trata-o como ativado. Para desativar um atributo booleano, deve removê-lo completamente do elemento.
Exemplos
❌ Inválido: usar "true" como valor
<label for="colors">Selecione as suas cores favoritas:</label>
<select id="colors" name="colors" multiple="true">
<option value="red">Vermelho</option>
<option value="green">Verde</option>
<option value="blue">Azul</option>
</select>
Isto desencadeia o erro de validação: Valor inválido “true” para o atributo “multiple” no elemento “select”.
✅ Corrigido: apenas nome do atributo (preferido)
<label for="colors">Selecione as suas cores favoritas:</label>
<select id="colors" name="colors" multiple>
<option value="red">Vermelho</option>
<option value="green">Verde</option>
<option value="blue">Azul</option>
</select>
✅ Corrigido: valor string vazia
<label for="colors">Selecione as suas cores favoritas:</label>
<select id="colors" name="colors" multiple="">
<option value="red">Vermelho</option>
<option value="green">Verde</option>
<option value="blue">Azul</option>
</select>
✅ Corrigido: valor que corresponde ao nome do atributo
<label for="colors">Selecione as suas cores favoritas:</label>
<select id="colors" name="colors" multiple="multiple">
<option value="red">Vermelho</option>
<option value="green">Verde</option>
<option value="blue">Azul</option>
</select>
❌ Erro comum: usar "false" para desativar
<!-- Isto NÃO desativa a seleção múltipla — o atributo ainda está presente -->
<select name="colors" multiple="false">
<option value="red">Vermelho</option>
<option value="green">Verde</option>
</select>
✅ Forma correta de desativar: remover o atributo completamente
<label for="color">Selecione uma cor:</label>
<select id="color" name="color">
<option value="red">Vermelho</option>
<option value="green">Verde</option>
</select>
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.
Saiba mais: