Sobre este problema HTML
O atributo max define o valor máximo que é aceitável e válido para o input que o contém. Quando o navegador encontra max="", espera um número de vírgula flutuante válido conforme definido pela especificação HTML. Uma string vazia não pode ser analisada como um número, pelo que o atributo torna-se sem significado e desencadeia um erro de validação.
Isto acontece frequentemente quando o HTML é gerado dinamicamente por um motor de templates ou framework que produz um valor vazio para max quando não foi configurado nenhum máximo. Também pode ocorrer quando um programador adiciona o atributo como placeholder com intenção de o preencher mais tarde.
Embora a maioria dos navegadores ignore silenciosamente um valor max inválido, confiar neste comportamento é problemático por várias razões:
-
Conformidade com os padrões: A especificação HTML requer que
maxseja um número de vírgula flutuante válido quando presente. -
Validação previsível: Um
maxvazio significa que não há restrição máxima do lado do cliente aplicada, o que pode não ser a intenção do programador. Remover explicitamente o atributo torna essa intenção clara. -
Acessibilidade: As tecnologias assistivas podem ler o atributo
maxpara comunicar restrições de input aos utilizadores. Um valor vazio poderia levar a um comportamento confuso ou indefinido.
Este erro aplica-se aos tipos de input que aceitam valores max de estilo numérico, incluindo number, range, date, datetime-local, month, week, e time.
Como corrigir
-
Definir um valor numérico válido: Se precisar de uma restrição máxima, forneça um número de vírgula flutuante adequado (por exemplo,
max="100"oumax="99.5"). -
Remover o atributo: Se não for necessário nenhum máximo, remova completamente o atributo
maxem vez de o deixar vazio. -
Corrigir templates dinâmicos: Se o seu HTML for gerado a partir de um template, adicione uma verificação condicional para que
maxseja apenas renderizado quando um valor estiver realmente disponível.
Exemplos
❌ Inválido: Atributo max vazio
<label for="quantity">Quantidade:</label>
<input type="number" id="quantity" name="quantity" max="">
A string vazia "" não é um número de vírgula flutuante válido, pelo que isto desencadeia o erro de validação.
✅ Corrigido: Fornecer um valor numérico válido
<label for="quantity">Quantidade:</label>
<input type="number" id="quantity" name="quantity" max="100">
✅ Corrigido: Remover completamente o atributo
<label for="quantity">Quantidade:</label>
<input type="number" id="quantity" name="quantity">
Se não for necessária nenhuma restrição máxima, simplesmente omita o atributo max.
❌ Inválido: max vazio num input de data
<label for="end-date">Data de fim:</label>
<input type="date" id="end-date" name="end-date" max="">
✅ Corrigido: Valor de data válido para max
<label for="end-date">Data de fim:</label>
<input type="date" id="end-date" name="end-date" max="2025-12-31">
Para tipos de input relacionados com datas, o valor max deve estar no formato apropriado de data/hora (por exemplo, YYYY-MM-DD para type="date").
Corrigir templates dinâmicos
Se estiver a gerar HTML com uma linguagem de templates, inclua condicionalmente o atributo apenas quando existir um valor. Por exemplo, num template estilo Jinja2:
<input type="number" id="price" name="price"
{% if max_price %}max="{{ max_price }}"{% endif %}>
Isto garante que o atributo max é apenas renderizado quando max_price tem um valor válido, evitando completamente o problema da string vazia.
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: