Skip to main content
Validación HTML

Valor incorrecto “”disabled”” para el atributo “disabled” en el elemento “input”.

Acerca de este problema HTML

Los atributos booleanos en HTML funcionan de manera diferente a los atributos regulares. Su mera presencia en un elemento los hace “true” (verdadero), y su ausencia los hace “false” (falso). Según la especificación HTML de WHATWG, un atributo booleano solo puede tener tres representaciones válidas:

  • Solo el nombre del atributo (ej., disabled)
  • El atributo con un valor de cadena vacía (ej., disabled="")
  • El atributo con su propio nombre como valor (ej., disabled="disabled")

Cualquier otro valor — incluyendo los aparentemente intuitivos como "true", "yes" o "no" — es inválido y hará que el Validador HTML de W3C reporte un error como: Valor incorrecto “disabled” para el atributo “disabled” en el elemento “input” (o un mensaje similar referenciando cualquier valor inválido que hayas usado).

Por qué es importante

Cumplimiento de estándares: Usar valores inválidos viola la especificación HTML, lo que puede llevar a comportamientos impredecibles conforme evolucionan los navegadores.

Comportamiento confuso: Un error común es escribir disabled="false" y esperar que el input esté habilitado. Esto no funciona como se esperaba — porque el atributo sigue presente, el elemento permanece deshabilitado independientemente del valor. Esto puede llevar a errores confusos donde los desarrolladores piensan que están habilitando un campo pero permanece deshabilitado.

Accesibilidad: Las tecnologías de asistencia dependen de la interpretación del DOM de los atributos booleanos. Aunque los navegadores típicamente manejan valores inválidos con elegancia tratando cualquier atributo disabled presente como verdadero, mantener valores válidos asegura el comportamiento más consistente en lectores de pantalla y otras herramientas.

Plantillas y frameworks: Este problema surge frecuentemente cuando los motores de plantillas o frameworks de JavaScript insertan valores de cadena en atributos booleanos. Si tu plantilla produce disabled="true" o disabled="false", deberías en su lugar incluir o omitir condicionalmente el atributo por completo.

Cómo solucionarlo

  1. Elimina el valor por completo — solo escribe el nombre del atributo.
  2. Usa una cadena vacía — escribe disabled="" si tus herramientas requieren un valor explícito.
  3. Usa la forma canónica — escribe disabled="disabled" si necesitas compatibilidad con XHTML.
  4. Para habilitar un elemento, elimina el atributo disabled completamente en lugar de establecerlo a "false".

Ejemplos

Uso incorrecto

Todos estos provocan un error de validación porque los valores no son válidos para un atributo booleano:

<input type="text" disabled="yes">
<input type="text" disabled="true">
<input type="text" disabled="false">
<input type="text" disabled="1">
<button disabled="no">Submit</button>

Ten en cuenta que disabled="false" y disabled="no" todavía deshabilitan el elemento — el navegador ve que el atributo está presente y lo trata como verdadero.

Uso correcto

Estas tres son formas válidas de deshabilitar un input:

<input type="text" disabled>
<input type="text" disabled="">
<input type="text" disabled="disabled">

Para tener un input habilitado, simplemente omite el atributo:

<input type="text">

Manejo de valores dinámicos en JavaScript

Si necesitas alternar el estado deshabilitado dinámicamente, usa la propiedad DOM en lugar de establecer un valor de atributo:

<form>
  <input type="text" id="username">
  <button type="button" id="toggle">Toggle</button>
  <script>
    document.getElementById("toggle").addEventListener("click", function () {
      var input = document.getElementById("username");
      input.disabled = !input.disabled;
    });
  </script>
</form>

Establecer element.disabled = true o element.disabled = false en JavaScript correctamente agrega o elimina el atributo del DOM sin producir markup inválido.

Otros atributos booleanos

Esta misma regla se aplica a todos los atributos booleanos en HTML, incluyendo checked, readonly, required, hidden, autoplay, loop, muted y otros. Por ejemplo:

<!-- Incorrecto -->

<input type="checkbox" checked="true">
<input type="email" required="required_field">

<!-- Correcto -->

<input type="checkbox" checked>
<input type="email" required>

Cuando tengas dudas, usa la forma más simple: solo el nombre del atributo sin valor. Es la más legible, la más concisa, y cumple completamente con la especificación HTML.

Encuentra problemas como este automáticamente

Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.

Ayúdanos a mejorar nuestras guías

¿Te ha sido útil esta guía?

¿Listo para validar tus sitios?
Inicia tu prueba gratuita hoy.