<input>: el elemento HTML de entrada
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julio de 2015.
* Some parts of this feature may have varying levels of support.
El elemento <input> HTML se usa para crear controles interactivos en formularios web con el fin de recibir datos del usuario. Existe una amplia variedad de tipos de datos de entrada y widgets de control disponibles, según el dispositivo y el agente de usuario. El elemento <input> es uno de los más potentes y complejos de todo HTML debido a la gran cantidad de combinaciones posibles entre tipos de entrada y atributos.
Pruébalo
<label for="name">Nombre (de 4 a 8 caracteres):</label>
<input
type="text"
id="name"
name="name"
required
minlength="4"
maxlength="8"
size="10" />
label {
display: block;
font:
1rem "Fira Sans",
sans-serif;
}
input,
label {
margin: 0.4rem 0;
}
Tipos de <input>
La forma en que funciona un <input> varía considerablemente según el valor de su atributo type, por lo que cada tipo se documenta en sus propias páginas de referencia. Si no se especifica este atributo, el tipo predeterminado que se adopta es text.
Los tipos disponibles son los siguientes:
| Tipo | Descripción | Ejemplos básicos |
|---|---|---|
| button |
Un botón pulsable sin comportamiento predeterminado, que muestra el valor del atributo value, vacío de forma predeterminada.
|
|
| checkbox | Una casilla de verificación que permite seleccionar o deseleccionar valores individuales. |
|
| color | Un control para especificar un color; abre un selector de color al activarse en los navegadores compatibles. |
|
| date | Un control para introducir una fecha (año, mes y día, sin hora). Abre un selector de fecha o ruedas numéricas para año, mes y día al activarse en los navegadores compatibles. |
|
| datetime-local | Un control para introducir una fecha y hora, sin zona horaria. Abre un selector de fecha o ruedas numéricas para los componentes de fecha y hora al activarse en los navegadores compatibles. |
|
Un campo para editar una dirección de correo electrónico. Se ve como un
input de text, pero incluye parámetros de validación y muestra el teclado
correspondiente en los navegadores y dispositivos compatibles con teclados dinámicos.
|
|
|
| file |
Un control que permite al usuario seleccionar un archivo.
Usa el atributo accept para definir los tipos de archivo que el control puede seleccionar.
|
|
| hidden | Un control que no se muestra en pantalla, pero cuyo valor se envía al servidor. Hay un ejemplo en la siguiente columna, ¡pero está oculto! | |
| image |
Un botón submit gráfico. Muestra una imagen definida por el atributo src.
El atributo alt se muestra si falta el src de la imagen.
|
|
| month | Un control para introducir un mes y un año, sin zona horaria. |
|
| number | Un control para introducir un número. Muestra un spinner y añade validación predeterminada. Muestra un teclado numérico en algunos dispositivos con teclados dinámicos. |
|
| password | Un campo de texto de una sola línea cuyo valor se oculta. Alerta al usuario si el sitio no es seguro. |
|
| radio |
Un botón de radio que permite seleccionar un único valor entre varias opciones con el mismo valor name.
|
|
| range |
Un control para introducir un número cuyo valor exacto no es importante.
Se muestra como un widget de rango que, de forma predeterminada, toma el valor intermedio.
Se usa junto con min y max para definir el rango de valores aceptables.
|
|
| reset | Un botón que restablece el contenido del formulario a sus valores predeterminados. No se recomienda su uso. |
|
| search | Un campo de texto de una sola línea para introducir cadenas de búsqueda. Los saltos de línea se eliminan automáticamente del valor introducido. Puede incluir un icono para borrar el contenido en los navegadores compatibles. Muestra un icono de búsqueda en lugar de la tecla Intro en algunos dispositivos con teclados dinámicos. |
|
| submit | Un botón que envía el formulario. |
|
| tel | Un control para introducir un número de teléfono. Muestra un teclado telefónico en algunos dispositivos con teclados dinámicos. |
|
| text | El valor predeterminado. Un campo de texto de una sola línea. Los saltos de línea se eliminan automáticamente del valor introducido. |
|
| time | Un control para introducir un valor de hora sin zona horaria. |
|
| url |
Un campo para introducir una URL. Se ve como un campo de text, pero
incluye parámetros de validación y muestra el teclado correspondiente
en los navegadores y dispositivos compatibles con teclados dinámicos.
|
|
| week | Un control para introducir una fecha compuesta por un número de año-semana y un número de semana, sin zona horaria. |
|
| Valores obsoletos | ||
datetime |
Un control para introducir una fecha y hora (hora, minuto, segundo y fracción de segundo) basada en la zona horaria UTC. |
|
Atributos
El elemento <input> es tan potente debido a sus atributos; el atributo type, descrito con los ejemplos anteriores, es el más importante. Dado que cada elemento <input>, sin importar su tipo, se basa en la interfaz HTMLInputElement, técnicamente todos comparten exactamente el mismo conjunto de atributos. Sin embargo, en la práctica, la mayoría de los atributos solo tienen efecto en un subconjunto específico de tipos de entrada. Además, la forma en que algunos atributos afectan a un input depende de su tipo, con un impacto distinto según el caso.
Esta sección incluye una tabla con todos los atributos junto con una breve descripción. A continuación, se presenta una lista que describe cada atributo con mayor detalle e indica con qué tipos de entrada están asociados. Los atributos comunes a la mayoría o a todos los tipos de entrada se definen con mayor detalle más adelante. Los atributos exclusivos de tipos de entrada específicos —o aquellos comunes a todos los tipos pero que presentan comportamientos especiales al utilizarse con un tipo concreto— se documentan en las páginas correspondientes a dichos tipos.
Los atributos del elemento <input> incluyen los atributos globales de HTML y, además:
| Atributo | Tipo(s) | Descripción |
|---|---|---|
accept |
file |
Pista sobre el tipo de archivo esperado en los controles de carga de archivos |
alpha |
color |
Opacidad del color |
alt |
image |
Atributo alt para el tipo image. Obligatorio por motivos de accesibilidad |
autocapitalize |
todos excepto url, email y password |
Controla la capitalización automática del texto introducido. |
autocomplete |
todos excepto checkbox, radio y los botones |
Sugerencia para la función de autocompletado de formularios |
capture |
file |
Método de captura de medios en los controles de carga de archivos |
checked |
checkbox, radio |
Indica si el control está marcado |
colorspace |
color |
El espacio de color que debe usarse para seleccionar el valor del color |
dirname |
hidden, text, search, url, tel, email |
Nombre del campo de formulario que se usa para enviar la direccionalidad del elemento al enviar el formulario |
disabled |
todos | Indica si el control de formulario está deshabilitado |
form |
todos | Asocia el control con un elemento form |
formaction |
image, submit |
URL que se usa para enviar el formulario |
formenctype |
image, submit |
Tipo de codificación de los datos del formulario que se usa al enviarlo |
formmethod |
image, submit |
Método HTTP que se usa para enviar el formulario |
formnovalidate |
image, submit |
Omite la validación de los controles del formulario al enviarlo |
formtarget |
image, submit |
Contexto de navegación para el envío del formulario |
height |
image |
Igual que el atributo height de <img>; dimensión vertical |
list |
todos excepto hidden, password, checkbox, radio y los botones |
Valor del atributo id del elemento <datalist> de las opciones de autocompletado. |
max |
date, month, week, time, datetime-local, number, range |
Valor máximo |
maxlength |
text, search, url, tel, email, password |
Longitud máxima (en número de caracteres) de value |
min |
date, month, week, time, datetime-local, number, range |
Valor mínimo |
minlength |
text, search, url, tel, email, password |
Longitud mínima (en número de caracteres) de value |
multiple |
email, file |
Booleano. Indica si se permiten varios valores |
name |
todos | Nombre del control de formulario. Se envía junto con el formulario como parte de un par nombre/valor |
pattern |
text, search, url, tel, email, password |
Patrón que debe coincidir con value para que sea válido |
placeholder |
text, search, url, tel, email, password, number |
Texto que aparece en el control de formulario cuando no tiene ningún valor establecido |
popovertarget |
button |
Designa un <input type="button"> como control de un elemento popover |
popovertargetaction |
button |
Especifica la acción que debe realizar un control de popover |
readonly |
todos excepto hidden, range, color, checkbox, radio y los botones |
Booleano. El valor no se puede editar |
required |
todos excepto hidden, range, color y los botones |
Booleano. Se requiere un valor o que el elemento esté marcado para poder enviar el formulario |
size |
text, search, url, tel, email, password |
Tamaño del control |
src |
image |
Igual que el atributo src de <img>; dirección del recurso de imagen |
step |
date, month, week, time, datetime-local, number, range |
Valores incrementales válidos |
switch |
checkbox |
Indica si el input checkbox debe representarse como un switch |
type |
todos | Tipo de control de formulario |
value |
todos excepto image |
El valor del control. Cuando se especifica en el HTML, corresponde al valor inicial |
width |
image |
Igual que el atributo width de <img> |
A continuación de las descripciones de los atributos estándar se incluyen algunos atributos adicionales no estándar.
Atributos individuales
accept-
Válido únicamente para el tipo de entrada
file, el atributoacceptdefine qué tipos de archivo se pueden seleccionar en un control de cargafile. Consulta el tipo de entrada file. alpha-
Válido únicamente para el tipo de entrada
color, el atributoalphapermite al usuario final establecer la opacidad del color que está seleccionando. alt-
Válido únicamente para el botón
image, el atributoaltproporciona texto alternativo para la imagen, mostrando su valor si falta elsrcde la imagen o si esta no llega a cargarse. Consulta el tipo de entrada image. autocapitalize-
Controla si el texto introducido se capitaliza automáticamente y, en tal caso, de qué manera. Consulta la página del atributo global
autocapitalizepara más información. autocomplete-
(No es un atributo booleano). El atributo
autocompletetoma como valor una cadena separada por espacios que describe, si corresponde, qué tipo de funcionalidad de autocompletado debe ofrecer el input. Una implementación típica de autocompletado recuerda valores introducidos previamente en el mismo campo, pero también pueden existir formas más complejas de autocompletado. Por ejemplo, un navegador podría integrarse con la lista de contactos de un dispositivo para autocompletar direccionesemailen un campo de correo electrónico. Consultaautocompletepara conocer los valores permitidos.El atributo
autocompletees válido enhidden,text,search,url,tel,email,date,month,week,time,datetime-local,number,range,colorypassword. Este atributo no tiene efecto en los tipos de entrada que no devuelven datos numéricos o de texto, siendo válido para todos los tipos de entrada exceptocheckbox,radio,fileo cualquiera de los tipos de botón.Consulta el atributo
autocompletepara más información, incluida la relacionada con la seguridad de las contraseñas y la forma en queautocompletese comporta de manera ligeramente distinta enhiddenrespecto a otros tipos de entrada. autofocus-
Un atributo booleano que, si está presente, indica que el input debe recibir el foco automáticamente cuando la página haya terminado de cargarse (o cuando se haya mostrado el elemento
<dialog>que lo contiene).Nota: Un elemento con el atributo
autofocuspuede recibir el foco antes de que se dispare el eventoDOMContentLoaded.Ningún documento puede tener más de un elemento con el atributo
autofocus. Si se coloca en más de un elemento, recibe el foco el primero que tenga el atributo.El atributo
autofocusno se puede usar en inputs de tipohidden, ya que estos no pueden recibir el foco.Advertencia: Enfocar un control de formulario automáticamente puede confundir a las personas con discapacidad visual que usan tecnología de lectura de pantalla, así como a personas con discapacidades cognitivas. Cuando se asigna
autofocus, los lectores de pantalla "teletransportan" al usuario hasta el control de formulario sin avisarle antes.Ten especial cuidado con la accesibilidad al aplicar el atributo
autofocus. Enfocar un control automáticamente puede provocar que la página se desplace al cargarse. El foco también puede hacer que se muestren teclados dinámicos en algunos dispositivos táctiles. Aunque un lector de pantalla anunciará la etiqueta del control de formulario que recibe el foco, no anunciará nada anterior a esa etiqueta, y un usuario vidente con un dispositivo pequeño también perderá el contexto que aportaba el contenido previo. capture-
Introducido en la especificación HTML Media Capture y válido únicamente para el tipo de entrada
file, el atributocapturedefine qué medio —micrófono, video o cámara— debe usarse para capturar un nuevo archivo que subir mediante el controlfile, en los escenarios compatibles. Consulta el tipo de entrada file. checked-
Válido tanto para el tipo
radiocomo paracheckbox,checkedes un atributo booleano. Si está presente en un tiporadio, indica que ese botón de radio es el que está seleccionado actualmente dentro del grupo de botones con el mismo nombre. Si está presente en un tipocheckbox, indica que la casilla está marcada de forma predeterminada (al cargar la página). No indica si la casilla está marcada en un momento dado: si su estado cambia, este atributo de contenido no refleja el cambio. (Solo se actualiza el atributo IDLcheckeddeHTMLInputElement).Nota: A diferencia de otros controles, el valor de las casillas de verificación y los botones de radio solo se incluye en los datos enviados si están
checkeden ese momento. Si lo están, se envían el nombre y el valor de los controles marcados.Por ejemplo, si una casilla cuyo
nameesfruittiene unvaluedecherryy está marcada, los datos del formulario enviados incluiránfruit=cherry. Si la casilla no está activa, no aparece en absoluto en los datos del formulario. Elvaluepredeterminado para las casillas de verificación y los botones de radio eson. colorspace-
Válido únicamente para el tipo de entrada
color, el atributocolorspaceespecifica el espacio de color que utiliza el input detype="color". Los posibles valores enumerados son:"limited-srgb": El color está en el espacio de color sRGB. Esto incluye valoresrgb(),hsl(),hwb()y<hex-color>. El valor del color se limita a 8 bits por componenter,gyb. Este es el valor predeterminado."display-p3": El espacio de color Display P3, por ejemplo,color(display-p3 1.84 -0.19 0.72 / 0.6)
dirname-
Válido para los tipos de entrada
hidden,text,search,url,telyemail, el atributodirnamepermite enviar la direccionalidad del elemento. Cuando se incluye, el control de formulario se envía con dos pares nombre/valor: el primero esnameyvalue, y el segundo es el valor del atributodirnamecomo nombre, con un valor deltrortlsegún lo establezca el navegador.html<form action="page.html" method="post"> <label> Fruta: <input type="text" name="fruit" dirname="fruit-dir" value="cherry" /> </label> <input type="submit" /> </form> <!-- page.html?fruit=cherry&fruit-dir=ltr -->Al enviar el formulario anterior, el input hace que se envíen tanto el par
name/valuedefruit=cherrycomo el pardirname/ dirección defruit-dir=ltr. Para más información, consulta el atributodirname. disabled-
Un atributo booleano que, si está presente, indica que el usuario no debe poder interactuar con el input. Los inputs deshabilitados suelen representarse con un color más tenue o mediante alguna otra señal que indique que el campo no está disponible para su uso.
En concreto, los inputs deshabilitados no reciben el evento
click, y tampoco se envían junto con el formulario.Nota: Aunque la especificación no lo exige, Firefox, de forma predeterminada, conserva el estado dinámico de deshabilitado de un
<input>entre cargas de página. Usa el atributoautocompletepara controlar esta funcionalidad. form-
Una cadena que especifica el elemento
<form>con el que está asociado el input (es decir, su formulario propietario). El valor de esta cadena, si está presente, debe coincidir con elidde un elemento<form>en el mismo documento. Si no se especifica este atributo, el elemento<input>se asocia con el formulario contenedor más cercano, si existe alguno.El atributo
formte permite colocar un input en cualquier parte del documento pero incluirlo en un formulario ubicado en otro lugar.Nota: Un input solo puede asociarse con un formulario.
formaction-
Válido únicamente para los tipos de entrada
imageysubmit. Consulta el tipo de entrada submit para más información. formenctype-
Válido únicamente para los tipos de entrada
imageysubmit. Consulta el tipo de entrada submit para más información. formmethod-
Válido únicamente para los tipos de entrada
imageysubmit. Consulta el tipo de entrada submit para más información. formnovalidate-
Válido únicamente para los tipos de entrada
imageysubmit. Consulta el tipo de entrada submit para más información. formtarget-
Válido únicamente para los tipos de entrada
imageysubmit. Consulta el tipo de entrada submit para más información. height-
Válido únicamente para el botón de entrada
image,heightindica la altura del archivo de imagen que se mostrará para representar el botón de envío gráfico. Consulta el tipo de entrada image. id-
Atributo global válido para todos los elementos, incluidos todos los tipos de entrada; define un identificador único (ID) que debe ser único en todo el documento. Su propósito es identificar el elemento al enlazarlo. El valor se usa como valor del atributo
forde<label>para vincular la etiqueta con el control de formulario. Consulta<label>. inputmode-
Un valor global válido para todos los elementos que indica a los navegadores qué tipo de configuración de teclado virtual utilizar al editar el elemento o su contenido. Los valores incluyen
none,text,tel,url,email,numeric,decimalysearch. list-
El valor asignado al atributo
listdebe ser elidde un elemento<datalist>ubicado en el mismo documento. El<datalist>proporciona una lista de valores predefinidos que se sugieren al usuario para este input. Los valores de la lista que no sean compatibles con eltypeno se incluyen entre las opciones sugeridas. Los valores proporcionados son sugerencias, no requisitos: los usuarios pueden elegir un valor de esta lista predefinida o proporcionar uno diferente.Es válido en
text,search,url,tel,email,date,month,week,time,datetime-local,number,rangeycolor.Según las especificaciones, el atributo
listno es compatible con los tiposhidden,password,checkbox,radio,file, ni con ninguno de los tipos de botón.Según el navegador, el usuario puede ver una paleta de colores personalizada sugerida, marcas a lo largo de un rango, o incluso un input que se abre como un
<select>pero que permite valores no incluidos en la lista. Consulta la tabla de compatibilidad con navegadores para conocer el comportamiento en los demás tipos de entrada.Consulta el elemento
<datalist>. max-
Válido en
date,month,week,time,datetime-local,numberyrange, define el valor más alto dentro del rango de valores permitidos. Si elvalueintroducido en el elemento lo supera, el elemento falla la validación de restricciones. Si el valor del atributomaxno es un número, el elemento no tiene valor máximo.Existe un caso especial: si el tipo de dato es periódico (como en fechas u horas), el valor de
maxpuede ser menor que el demin, lo que indica que el rango puede dar la vuelta; por ejemplo, esto permite especificar un rango horario de 10 p. m. a 4 a. m. maxlength-
Válido en
text,search,url,tel,emailypassword, define la longitud máxima de cadena (medida en unidades de código UTF-16) que el usuario puede introducir en el campo. Debe ser un valor entero igual o mayor que 0. Si no se especificamaxlength, o se especifica un valor no válido, el campo no tiene longitud máxima. Este valor también debe ser mayor o igual que el deminlength.El input fallará la validación de restricciones si la longitud del texto introducido en el campo supera el límite de
maxlengthunidades de código UTF-16. De forma predeterminada, los navegadores impiden que el usuario introduzca más caracteres de los permitidos por el atributomaxlength. La validación de restricciones solo se aplica cuando el usuario modifica el valor. Consulta Validación en el lado del cliente para más información. min-
Válido en
date,month,week,time,datetime-local,numberyrange, define el valor más negativo dentro del rango de valores permitidos. Si elvalueintroducido en el elemento es menor que este, el elemento falla la validación de restricciones. Si el valor del atributominno es un número, el elemento no tiene valor mínimo.Este valor debe ser menor o igual al valor del atributo
max. Si el atributominestá presente pero no se especifica o no es válido, no se aplica ningún valormin. Si el atributomines válido y un valor no vacío es menor que el mínimo permitido pormin, la validación de restricciones impedirá el envío del formulario. Consulta Validación en el lado del cliente para más información.Existe un caso especial: si el tipo de dato es periódico (como fechas u horas), el valor de
maxpuede ser menor que el demin, lo que indica que el rango puede dar la vuelta; por ejemplo, esto permite especificar un rango horario de 10 p. m. a 4 a. m. minlength-
Válido en
text,search,url,tel,emailypassword, define la longitud mínima de cadena (medida en unidades de código UTF-16) que el usuario puede introducir en el campo. Debe ser un valor entero no negativo, menor o igual que el especificado pormaxlength. Si no se especificaminlength, o se especifica un valor no válido, el input no tiene longitud mínima.El input fallará la validación de restricciones si la longitud del texto introducido es menor que
minlengthunidades de código UTF-16, lo que impedirá el envío del formulario. La validación de restricciones solo se aplica cuando el usuario cambia el valor. Consulta Validación en el lado del cliente para más información. multiple-
El atributo booleano
multiple, si se establece, indica que el usuario puede introducir direcciones de correo separadas por comas en el widget de email, o elegir más de un archivo con el inputfile. Consulta los tipos de entrada email y file. name-
Una cadena que especifica un nombre para el control de entrada. Este nombre se envía junto con el valor del control cuando se envían los datos del formulario.
Considera
namecomo un atributo obligatorio (aunque no lo sea). Si un input no tienenameespecificado, onameestá vacío, ¡el valor no se envía junto con el formulario! (Tampoco se envían los controles deshabilitados, los botones de radio sin marcar, las casillas de verificación sin marcar ni los botones de reinicio).Hay dos casos especiales:
_charset_: Si se usa como nombre de un elemento<input>de tipo hidden, el agente de usuario establece automáticamente elvaluedel input con la codificación de caracteres usada para enviar el formulario.isindex: Por razones históricas, no se permite el nombreisindex.
El atributo
namegenera un comportamiento particular en los botones de radio.Solo se puede marcar un botón de radio a la vez dentro de un grupo con el mismo nombre. Al seleccionar cualquier botón de radio de ese grupo, se deselecciona automáticamente el que estuviera marcado en el mismo grupo. Si se envía el formulario, se envía el valor de ese único botón marcado junto con el nombre.
Al navegar con Tab por una serie de botones de radio con el mismo nombre, si uno está marcado, ese es el que recibe el foco. Si no están agrupados en el orden del código fuente y uno del grupo está marcado, al llegar al primero del grupo la navegación con Tab omite todos los que no estén marcados. Es decir, si uno está marcado, Tab omite los botones de radio sin marcar del grupo. Si ninguno está marcado, el grupo recibe el foco al llegar al primer botón con ese nombre.
Una vez que uno de los botones de radio de un grupo tiene el foco, las teclas de flecha permiten navegar por todos los botones de radio con el mismo nombre, incluso si no están agrupados en el orden del código fuente.
Cuando a un elemento input se le asigna un
name, ese nombre pasa a formar parte de la propiedadHTMLFormElement.elementsdel elemento form propietario. Si tienes un input cuyonameesguesty otro cuyonameeshat-size, puedes usar el siguiente código:jslet form = document.querySelector("form"); let guestName = form.elements.guest; let hatSize = form.elements["hat-size"];Tras ejecutar este código,
guestNameserá elHTMLInputElementcorrespondiente al campoguest, yhatSizeel objeto del campohat-size.Advertencia: Evita asignar a los elementos de formulario un
nameque coincida con una propiedad integrada del formulario, ya que en ese caso sobrescribirías la propiedad o el método predefinido con esta referencia al input correspondiente. pattern-
Válido en
text,search,url,tel,emailypassword, el atributopatternse usa para compilar una expresión regular que elvaluedel input debe cumplir para pasar la validación de restricciones. Debe ser una expresión regular de JavaScript válida, del tipo usado porRegExpy documentado en nuestra guía sobre expresiones regulares. No se deben incluir barras diagonales alrededor del texto del patrón. Al compilar la expresión regular:- el patrón se envuelve implícitamente con
^(?:y)$, de modo que se requiera la coincidencia con el valor completo del input, es decir,^(?:<patrón>)$. - se especifica el indicador
'v'para que el patrón se trate como una secuencia de puntos de código Unicode, en lugar de ASCII.
Si el atributo
patternestá presente pero no tiene valor especificado o no es válido, no se aplica ninguna expresión regular y el atributo se ignora por completo. Si el atributo pattern es válido y un valor no vacío no coincide con el patrón, la validación de restricciones impedirá el envío del formulario. Si está presentemultiple, la expresión regular compilada se compara con cada valor separado por comas.Nota: Si usas el atributo
pattern, informa al usuario sobre el formato esperado incluyendo un texto explicativo cercano. También puedes incluir un atributotitlepara explicar los requisitos que debe cumplir el patrón; la mayoría de los navegadores muestran este title como un tooltip. La explicación visible es obligatoria por accesibilidad. El tooltip es solo una mejora adicional.Consulta Validación en el lado del cliente para más información.
- el patrón se envuelve implícitamente con
placeholder-
Válido en
text,search,url,tel,email,passwordynumber, el atributoplaceholderofrece al usuario una breve pista del tipo de información esperada en el campo. Debe ser una palabra o frase corta que sugiera el tipo de dato esperado, en lugar de una explicación o instrucción. El texto no debe incluir saltos de línea. Por ejemplo, si un campo debe capturar el nombre de pila del usuario y su etiqueta es "Nombre", un placeholder adecuado podría ser "p. ej., Mustafa".Nota: El atributo
placeholderno es tan útil semánticamente como otras formas de explicar tu formulario, y puede causar problemas técnicos inesperados en tu contenido. Consulta Etiquetas para más información. popovertarget-
Convierte un elemento
<input type="button">en un botón de control de popover; toma como valor el ID del elemento popover que va a controlar. Consulta la página principal de la Popover API para más detalles. Establecer una relación entre un popover y su botón invocador mediante el atributopopovertargettiene dos efectos adicionales útiles:- El navegador crea una relación implícita
aria-detailsyaria-expandedentre el popover y el invocador, y coloca el popover en una posición lógica dentro del orden de navegación por teclado cuando se muestra. Esto hace que el popover sea más accesible para usuarios de teclado y de tecnologías de asistencia (AT) (consulta también Características de accesibilidad de los popover). - El navegador crea una referencia de anclaje implícita entre ambos, lo que facilita mucho posicionar los popovers en relación con sus controles mediante Posicionamiento de anclaje CSS. Consulta Posicionamiento de anclaje de popover para más detalles.
- El navegador crea una relación implícita
popovertargetaction-
Especifica la acción que se realizará en un elemento popover controlado por un
<input type="button">. Los valores posibles son:"hide"-
El botón ocultará un popover que esté mostrándose. Si intentas ocultar un popover que ya está oculto, no se realiza ninguna acción.
"show"-
El botón mostrará un popover que esté oculto. Si intentas mostrar un popover que ya se está mostrando, no se realiza ninguna acción.
"toggle"-
El botón alterna el popover entre mostrado y oculto. Si el popover está oculto, se mostrará; si se está mostrando, se ocultará. Si se omite
popovertargetaction,"toggle"es la acción predeterminada que realizará el botón de control.
readonly-
Un atributo booleano que, cuando está presente, indica que el usuario no debe poder editar el valor del input. El atributo
readonlyes compatible con los tipos de entradatext,search,url,tel,email,date,month,week,time,datetime-local,numberypassword.Consulta Atributo HTML:
readonlypara más información. required-
requiredes un atributo booleano que, cuando está presente, indica que el usuario debe especificar un valor para el input antes de poder enviar el formulario propietario. El atributorequiredes compatible con los inputstext,search,url,tel,email,date,month,week,time,datetime-local,number,password,checkbox,radioyfile.Consulta Validación en el lado del cliente y Atributo HTML:
requiredpara más información. size-
Válido en
email,password,tel,urlytext, el atributosizeespecifica cuánto del input se muestra. Básicamente produce el mismo resultado que establecer la propiedad CSSwidth, con algunas particularidades. La unidad real del valor depende del tipo de entrada. Parapasswordytextes un número de caracteres (o unidadesem) con un valor predeterminado de20; para los demás, son píxeles (o unidadespx). Elwidthde CSS tiene prioridad sobre el atributosize. src-
Válido únicamente para el botón de entrada
image,srces una cadena que especifica la URL del archivo de imagen que se mostrará para representar el botón de envío gráfico. Consulta el tipo de entrada image. step-
Válido en
date,month,week,time,datetime-local,numberyrange, el atributostepes un número que especifica la granularidad que debe cumplir el valor. Solo son válidos los valores que representan un número entero de pasos desde la base del paso. La base del paso esminsi está especificado,valueen caso contrario, o0si no se proporciona ninguno de los dos (excepto paraweek, cuya base de paso predeterminada es −259,200,000, correspondiente al inicio de la semana1970-W01).Si no se incluye explícitamente:
steptoma el valor predeterminado 1 paranumberyrange.- Cada tipo de entrada de fecha/hora tiene un valor
steppredeterminado adecuado para su tipo; consulta las páginas de cada input:date,datetime-local,month,timeyweek.
El valor debe ser un número positivo (entero o decimal) o el valor especial
any, lo que significa que no se aplica ningún incremento, y se permite cualquier valor (salvo otras restricciones, comominymax).Por ejemplo, si tienes
<input type="number" min="10" step="2">, cualquier entero par igual o mayor que10es válido. Si se omite, en<input type="number">cualquier entero es válido, pero los decimales (como4.2) no lo son, porquesteptoma el valor predeterminado1. Para que4.2fuera válido,steptendría que establecerse enany, 0.1, 0.2, o el valor demintendría que terminar en.2, como en<input type="number" min="-5.2">.Nota: Cuando los datos introducidos por el usuario no se ajustan a la configuración de pasos, el valor se considera inválido en la validación de restricciones y coincidirá con la pseudoclase
:invalid.Consulta Validación en el lado del cliente para más información.
switch-
Válido únicamente en inputs
checkbox,switches un atributo booleano que indica si el input checkbox debe representarse como un switch.Nota: Este atributo aún es experimental y tiene compatibilidad limitada con los navegadores. El atributo se ignora en los navegadores no compatibles.
tabindex-
Atributo global válido para todos los elementos, incluidos todos los tipos de entrada; es un atributo entero que indica si el elemento puede recibir el foco de entrada (si es enfocable) y si debe participar en la navegación secuencial por teclado. Dado que todos los tipos de entrada, salvo el tipo hidden, son enfocables, este atributo no debería usarse en controles de formulario, ya que hacerlo requeriría gestionar el orden de foco de todos los elementos del documento, con el riesgo de perjudicar la usabilidad y la accesibilidad si se hace incorrectamente.
title-
Atributo global válido para todos los elementos, incluidos todos los tipos de entrada, que contiene un texto con información orientativa relacionada con el elemento al que pertenece. Esta información suele presentarse al usuario como un tooltip, aunque no necesariamente. El
titleNO debe usarse como explicación principal del propósito del control de formulario. En su lugar, usa el elemento<label>con un atributoforcuyo valor sea eliddel control de formulario. Consulta Etiquetas más abajo. type-
Una cadena que especifica el tipo de control a mostrar. Por ejemplo, para crear una casilla de verificación se usa el valor
checkbox. Si se omite (o se especifica un valor desconocido), se usa el tipo de entradatext, creando un campo de texto plano.Los valores permitidos se enumeran más arriba, en Tipos de input.
value-
El valor del control de entrada. Cuando se especifica en el HTML, es el valor inicial, y a partir de ahí se puede modificar o consultar en cualquier momento mediante JavaScript, accediendo a la propiedad
valuedel objetoHTMLInputElementcorrespondiente. El atributovaluesiempre es opcional, aunque debería considerarse obligatorio paracheckbox,radioyhidden. width-
Válido solo para el botón de entrada
image,widthes el ancho del archivo de imagen que se mostrará para representar el botón de envío gráfico. Consulta el tipo de entrada image.
Atributos no estándar
Los siguientes atributos no estándar también están disponibles en algunos navegadores. Como regla general, debes evitar usarlos salvo que sea inevitable.
| Atributo | Descripción |
|---|---|
incremental |
Indica si se deben enviar eventos repetidos search para permitir actualizar los resultados de búsqueda en tiempo real mientras el usuario sigue editando el valor del campo.
Solo WebKit y Blink (Safari, Chrome, Opera, etc.).
|
mozactionhint |
Una cadena que indica el tipo de acción que se realizará cuando el usuario
presione la tecla Enter o Return mientras edita el
campo; se usa para determinar una etiqueta adecuada para esa tecla en un
teclado virtual. Como este atributo está obsoleto, usa |
orient |
Establece la orientación del control deslizante de rango. Solo Firefox. |
results |
El número máximo de elementos que deben mostrarse en la lista desplegable de búsquedas anteriores. Solo Safari. |
webkitdirectory
|
Un valor booleano que indica si solo se debe permitir al usuario elegir un directorio (o directorios, si también está presente multiple)
|
incremental-
El atributo booleano
incrementales una extensión de WebKit y Blink (compatible, por tanto, con Safari, Opera, Chrome, etc.) que, si está presente, le indica al agente de usuario que trate el input como una búsqueda en vivo. Mientras el usuario edita el valor del campo, el agente de usuario envía eventossearchal objetoHTMLInputElementque representa el cuadro de búsqueda. Esto permite que tu código actualice los resultados de búsqueda en tiempo real mientras el usuario edita la consulta.Si no se especifica
incremental, el eventosearchsolo se envía cuando el usuario inicia una búsqueda de forma explícita (por ejemplo, presionando la tecla Enter o Return mientras edita el campo).El evento
searchestá limitado en frecuencia, de modo que no se envía más a menudo que un intervalo definido por la implementación. orient-
Similar a la propiedad CSS no estándar -moz-orient, que afecta a los elementos
<progress>y<meter>, el atributoorientdefine la orientación del control deslizante de rango. Los valores incluyenhorizontal, que representa el rango de forma horizontal, yvertical, que lo representa de forma vertical. Consulta Crear controles de formulario verticales para conocer un enfoque moderno para crear controles de formulario verticales. results-
El atributo
results, compatible solo con Safari, es un valor numérico que permite sobrescribir el número máximo de entradas que se muestran en el menú desplegable nativo del elemento<input>de las búsquedas anteriores.El valor debe ser un número decimal no negativo. Si no se proporciona, o se indica un valor no válido, se usa el número máximo predeterminado del navegador.
webkitdirectory-
El atributo booleano
webkitdirectory, si está presente, indica que solo los directorios deben estar disponibles para que el usuario los seleccione en la interfaz del selector de archivos. ConsultaHTMLInputElement.webkitdirectorypara más detalles y ejemplos.Aunque originalmente solo se implementó en navegadores basados en WebKit,
webkitdirectorytambién se puede usar en Microsoft Edge, así como en Firefox 50 y versiones posteriores. Sin embargo, aunque tiene un soporte relativamente amplio, todavía no es estándar y no debe usarse a menos que no tengas otra alternativa.
Métodos
La interfaz HTMLInputElement, que representa los elementos <input> en el DOM, ofrece los siguientes métodos. También están disponibles los métodos especificados por las interfaces padre HTMLElement, Element, Node y EventTarget.
checkValidity()-
Devuelve
truesi el valor del elemento pasa las comprobaciones de validez; de lo contrario, devuelvefalsey dispara un eventoinvaliden el elemento. reportValidity()-
Devuelve
truesi el valor del elemento pasa las comprobaciones de validez; de lo contrario, devuelvefalse, dispara un eventoinvaliden el elemento y (si el evento no se cancela) informa del problema al usuario. select()-
Selecciona todo el contenido del elemento
<input>, si su contenido es seleccionable. Para elementos sin contenido de texto seleccionable (como un selector visual de color o un input de fecha con calendario), este método no hace nada. setCustomValidity()-
Establece un mensaje personalizado que se mostrará si el valor del elemento de entrada no es válido.
setRangeText()-
Establece el contenido del rango de caracteres especificado del elemento de entrada con una cadena dada. Está disponible un parámetro
selectModeque permite controlar cómo se ve afectado el contenido existente. setSelectionRange()-
Selecciona el rango de caracteres especificado dentro de un elemento de entrada textual. No hace nada en los inputs que no se presentan como campos de texto.
showPicker()-
Muestra el selector del navegador para el elemento de entrada, el mismo que normalmente aparecería al seleccionar el elemento, pero activado mediante la pulsación de un botón u otra interacción del usuario.
stepDown()-
Disminuye el valor de un input numérico en uno, de forma predeterminada, o en el número de unidades especificado.
stepUp()-
Incrementa el valor de un input numérico en uno o en el número de unidades especificado.
CSS
Al ser elementos reemplazados, los inputs cuentan con algunas características que no se aplican a elementos que no son de formulario. Existen selectores CSS que pueden apuntar específicamente a controles de formulario según sus características de interfaz, conocidos como pseudoclases de interfaz de usuario (UI). El elemento input también se puede seleccionar por tipo mediante selectores de atributo. Además, hay algunas propiedades especialmente útiles.
Pseudoclases de interfaz de usuario
| Pseudoclase | Descripción |
|---|---|
:enabled |
Cualquier elemento actualmente habilitado que se pueda activar (seleccionar, hacer clic, escribir, etc.) o recibir el foco, y que además tenga un estado deshabilitado en el que no se pueda activar ni recibir el foco. |
:disabled |
Cualquier elemento actualmente deshabilitado que tenga un estado habilitado, es decir, que de otro modo podría activarse (seleccionarse, recibir clics, escritura, etc.) o recibir el foco si no estuviera deshabilitado. |
:read-only |
Elemento que el usuario no puede editar |
:read-write |
Elemento que el usuario puede editar. |
:placeholder-shown |
Elemento que actualmente muestra texto placeholder,
incluidos los elementos <input> y <textarea> que tienen el atributo placeholder presente y que, por el momento, no tienen ningún valor.
|
:default |
Elementos de formulario que son el predeterminado dentro de un grupo de elementos relacionados. Coincide con los tipos de entrada checkbox y radio que estaban marcados al cargar o renderizar la página. |
:checked |
Coincide con los tipos de entrada checkbox y
radio que están marcados en ese momento
(y con el <option> de un
<select> que está seleccionado actualmente).
|
:indeterminate |
Elementos checkbox
cuya propiedad indeterminate se ha establecido en true mediante JavaScript,
elementos radio, cuando todos los
botones de radio con el mismo valor de name en el formulario están sin marcar, y
elementos <progress> en estado indeterminado
|
:valid |
Controles de formulario a los que se les puede aplicar validación de restricciones y que actualmente son válidos. |
:invalid |
Controles de formulario a los que se aplica validación de restricciones y
que actualmente no son válidos. Coincide con un control de formulario
cuyo valor no cumple las restricciones establecidas por sus atributos, como
required,
pattern,
step y max.
|
:in-range |
Un input no vacío cuyo valor actual está dentro de los límites del
rango especificados por los atributos min y max, y por step.
|
:out-of-range |
Un input no vacío cuyo valor actual NO está dentro de los límites del
rango especificados por los atributos min
y max, o que
no cumple la restricción de step.
|
:required |
Elemento <input>, <select> o <textarea> que tiene establecido el atributo required.
Solo coincide con elementos que pueden ser obligatorios.
Incluir el atributo en un elemento que no admite ser obligatorio no produce coincidencia.
|
:optional |
Elemento <input>, <select> o
<textarea> que NO tiene establecido el atributo required.
No coincide con elementos que no pueden ser obligatorios.
|
:blank |
Elementos <input> y <textarea> que actualmente no tienen ningún valor.
|
:user-invalid |
Similar a :invalid, pero se activa al perder el foco (blur).
Coincide con un input no válido, pero solo después de la interacción del usuario, por ejemplo al enfocar el control, al abandonarlo o al
intentar enviar el formulario que contiene el control no válido.
|
:open |
Elementos <input> que muestran un selector para que el usuario elija un valor (por ejemplo <input type="color">) — pero solo cuando el elemento está en el estado abierto, es decir, cuando el selector se muestra.
|
Ejemplo de pseudoclases
Podemos aplicar estilos a la etiqueta de una casilla de verificación según si está marcada o no. En este ejemplo, aplicamos estilos a color y font-weight del <label> que aparece justo después de un input marcado. No aplicamos ningún estilo si el input no está marcado.
input:checked + label {
color: red;
font-weight: bold;
}
Selectores de atributo
Es posible apuntar a distintos tipos de controles de formulario según su type usando selectores de atributo. Los selectores de atributos CSS coinciden con los elementos basándose en la presencia de un atributo o en el valor de un atributo determinado.
/* coincide con un input de contraseña */
input[type="password"] {
}
/* coincide con un control de formulario cuyos valores válidos están limitados a un rango de valores */
input[min][max] {
}
/* coincide con un control de formulario con un atributo pattern */
input[pattern] {
}
::placeholder
De forma predeterminada, el texto del placeholder tiene una apariencia translúcida o gris claro. El pseudoelemento ::placeholder representa el texto placeholder del input. Se puede estilizar con un subconjunto limitado de propiedades CSS.
::placeholder {
color: blue;
}
En una regla que use ::placeholder en su selector solo se puede usar el subconjunto de propiedades CSS que se aplican al pseudoelemento ::first-line.
caret-color
Una propiedad específica de los elementos relacionados con la introducción de texto es la propiedad CSS caret-color, que permite establecer el color con el que se dibuja el cursor de texto:
HTML
<label for="textInput">Fíjate en el cursor rojo:</label>
<input id="textInput" class="custom" size="32" />
CSS
input.custom {
caret-color: red;
font:
16px "Helvetica",
"Arial",
sans-serif;
}
Resultado
field-sizing
La propiedad field-sizing permite controlar el comportamiento de dimensionamiento de los inputs de formulario (es decir, de forma predeterminada reciben un tamaño preferido fijo). Esta propiedad permite anular ese comportamiento predeterminado, dejando que los controles de formulario ajusten su tamaño al de su contenido.
Esta propiedad se suele usar para crear campos de formulario que se ajustan a su contenido y crecen a medida que se introduce más texto. Funciona con tipos de entrada que aceptan texto directo (por ejemplo, text y url), con el tipo de entrada file, y con elementos <textarea>.
object-position y object-fit
En ciertos casos (normalmente en inputs no textuales e interfaces especializadas), el elemento <input> es un elemento reemplazado. Cuando lo es, la posición y el tamaño del elemento dentro de su marco se pueden ajustar mediante las propiedades CSS object-position y object-fit.
Estilo
Para más información sobre cómo aplicar color a los elementos en HTML, consulta:
Consulta también:
Funcionalidades adicionales
>Etiquetas
Las etiquetas son necesarias para asociar texto de ayuda con un <input>. El elemento <label> proporciona información explicativa sobre un campo de formulario que siempre resulta adecuada (aparte de cualquier inquietud de diseño que puedas tener). Nunca es mala idea usar <label> para explicar qué se debe ingresar en un <input> o <textarea>.
Etiquetas asociadas
El emparejamiento semántico de los elementos <input> y <label> es útil para las tecnologías de asistencia, como los lectores de pantalla. Al emparejarlos mediante el atributo for del <label>, vinculas la etiqueta con el input de forma que los lectores de pantalla puedan describir los inputs a los usuarios con mayor precisión.
No basta con tener texto plano junto al elemento <input>. Por el contrario, la usabilidad y la accesibilidad requieren incluir un <label>, ya sea implícito o explícito:
<!-- inaccesible -->
<p>Introduce tu nombre: <input id="name" type="text" size="30" /></p>
<!-- etiqueta implícita -->
<p>
<label>Introduce tu nombre: <input id="name" type="text" size="30" /></label>
</p>
<!-- etiqueta explícita -->
<p>
<label for="name">Introduce tu nombre: </label>
<input id="name" type="text" size="30" />
</p>
El primer ejemplo no es accesible: no existe ninguna relación entre el texto y el elemento <input>.
Además de un nombre accesible, la etiqueta ofrece una zona de "impacto" más grande para que los usuarios de mouse y de pantallas táctiles puedan hacer clic o tocar. Al emparejar un <label> con un <input>, hacer clic en cualquiera de los dos enfocará el <input>. Si usas texto plano para "etiquetar" tu input, esto no ocurrirá. Que el texto forme parte del área de activación del input resulta útil para las personas con dificultades de control motriz.
Como desarrolladores web, es importante que nunca demos por hecho que las personas van a saber todo lo que nosotros sabemos. La diversidad de personas que usan la web —y, por extensión, tu sitio web— prácticamente garantiza que algunos de tus visitantes tendrán procesos de pensamiento o circunstancias distintas que los llevarán a interpretar tus formularios de forma muy diferente a la tuya si no cuentan con etiquetas claras y bien presentadas.
Los placeholders no son accesibles
El atributo placeholder permite especificar un texto que aparece dentro del propio área de contenido del elemento <input> cuando está vacío. Nunca debería ser necesario el placeholder para entender tus formularios. No es una etiqueta y no debe usarse como sustituto, porque no lo es. El placeholder se usa para dar una idea de cómo debería lucir el valor introducido, no como explicación o instrucción.
El placeholder no solo es inaccesible para los lectores de pantalla, sino que además desaparece en cuanto el usuario introduce cualquier texto en el control de formulario, o si el control ya tiene un valor. Los navegadores con funciones de traducción automática de páginas pueden omitir los atributos al traducir, por lo que el placeholder podría no traducirse.
Nota:
No utilices el atributo placeholder si puedes evitarlo. Si necesitas etiquetar un elemento <input>, usa el elemento <label>.
Validación en el lado del cliente
Advertencia:
La validación en el lado del cliente es útil, pero no garantiza que el servidor reciba datos válidos. Si los datos deben tener un formato específico, verifícalo siempre también en el lado del servidor, y devuelve una respuesta HTTP 400 si el formato no es válido.
Además de poder usar CSS para aplicar estilos a los inputs según sus estados de interfaz :valid o :invalid —según el estado actual de cada input, como se indicó antes en la sección Pseudoclases de interfaz de usuario—, el navegador realiza validación en el lado del cliente al (intentar) enviar el formulario. Al enviarlo, si hay algún control de formulario que no supera la validación de restricciones, los navegadores compatibles muestran un mensaje de error en el primer control no válido, ya sea un mensaje predeterminado según el tipo de error o uno que hayas definido tú.
Algunos tipos de entrada y otros atributos limitan qué valores son válidos para un input determinado. Por ejemplo, <input type="number" min="2" max="10" step="2"> significa que solo son válidos los números 2, 4, 6, 8 o 10. Podrían producirse varios errores, entre ellos rangeUnderflow si el valor es menor que 2, rangeOverflow si es mayor que 10, stepMismatch si el valor es un número entre 2 y 10 pero no un entero par (no cumple los requisitos del atributo step), o typeMismatch si el valor no es un número.
En los tipos de entrada cuyo dominio de valores posibles es periódico (es decir, al llegar al valor más alto, los valores vuelven al principio en lugar de terminar), es posible que los valores de las propiedades max y min aparezcan invertidos, lo que indica que el rango de valores permitidos comienza en min, da la vuelta hasta el valor más bajo posible y continúa hasta alcanzar max. Esto resulta especialmente útil para fechas y horas, como cuando quieres permitir un rango de 8 p. m. a 8 a. m.:
<input type="time" min="20:00" max="08:00" name="overnight" />
Ciertos atributos y sus valores pueden provocar un ValidityState de error específico:
| Atributo | Propiedad relevante | Descripción |
|---|---|---|
max |
validityState.rangeOverflow |
Ocurre cuando el valor es mayor que el máximo definido por
el atributo max
|
maxlength |
validityState.tooLong |
Ocurre cuando el número de caracteres es mayor que el número permitido por la propiedad maxlength
|
min |
validityState.rangeUnderflow |
Ocurre cuando el valor es menor que el mínimo definido por el atributo min
|
minlength |
validityState.tooShort |
Ocurre cuando el número de caracteres es menor que el requerido por la propiedad minlength
|
pattern |
validityState.patternMismatch |
Ocurre cuando se incluye un atributo pattern con una expresión regular válida y value no coincide con ella.
|
required |
validityState.valueMissing |
Ocurre cuando el atributo required está presente, pero el valor es null, o el radio o checkbox no está marcado.
|
step |
validityState.stepMismatch |
El valor no coincide con el incremento de step. El incremento predeterminado es 1, por lo que en type="number"
solo son válidos los enteros si no se incluye step. step="any" nunca genera este error.
|
type |
validityState.typeMismatch |
Ocurre cuando el valor no es del tipo correcto; por ejemplo, un email que no contiene una @ o una url que no incluye protocolo.
|
Si un control de formulario no tiene el atributo required, ningún valor, una cadena vacía, no es no válido. Incluso si están presentes los atributos anteriores, con la excepción de required, una cadena vacía no generará un error.
Podemos establecer límites sobre los valores que aceptamos, y los navegadores compatibles validarán de forma nativa estos valores de formulario y alertarán al usuario si hay algún error al enviarlo.
Además de los errores descritos en la tabla anterior, la interfaz validityState contiene las propiedades booleanas de solo lectura badInput, valid y customError. El objeto de validez incluye:
validityState.valueMissingvalidityState.typeMismatchvalidityState.patternMismatchvalidityState.tooLongvalidityState.tooShortvalidityState.rangeUnderflowvalidityState.rangeOverflowvalidityState.stepMismatchvalidityState.badInputvalidityState.validvalidityState.customError
En cada una de estas propiedades booleanas, un valor true indica que la razón especificada por la que la validación puede haber fallado es verdadera, con la excepción de la propiedad valid, que es true si el valor del elemento cumple todas las restricciones.
Si hay un error, los navegadores compatibles alertarán al usuario e impedirán el envío del formulario. Una advertencia: si se establece un error personalizado con un valor verdadero (cualquier cosa que no sea una cadena vacía o null), se impedirá el envío del formulario. Si no hay ningún mensaje de error personalizado y ninguna de las demás propiedades devuelve true, valid será true y el formulario podrá enviarse.
function validate(input) {
let validityState = input.validity;
if (validityState.valueMissing) {
input.setCustomValidity("Se requiere un valor");
} else if (validityState.rangeUnderflow) {
input.setCustomValidity("Tu valor es demasiado bajo");
} else if (validityState.rangeOverflow) {
input.setCustomValidity("Tu valor es demasiado alto");
} else {
input.setCustomValidity("");
}
}
La última línea, que establece el mensaje de validez personalizado como cadena vacía, es fundamental. Si el usuario comete un error y se establece la validez, el envío fallará, incluso si todos los valores son válidos, hasta que el mensaje sea null.
Ejemplo de error de validación personalizado
Si quieres mostrar un mensaje de error personalizado cuando un campo no supera la validación, debes usar la API de validación de restricciones disponible en los elementos <input> (y relacionados). Toma como ejemplo el siguiente formulario:
<form>
<label for="name"
>Introduce tu nombre de usuario (letras mayúsculas y minúsculas):
</label>
<input type="text" name="name" id="name" required pattern="[A-Za-z]+" />
<button>Enviar</button>
</form>
Las funciones básicas de validación de formularios HTML harán que se muestre un mensaje de error predeterminado si intentas enviar el formulario sin rellenarlo correctamente, o con un valor que no coincide con el pattern.
Si en cambio quisieras mostrar mensajes de error personalizados, podrías usar JavaScript como el siguiente:
const nameInput = document.querySelector("input");
nameInput.addEventListener("input", () => {
nameInput.setCustomValidity("");
nameInput.checkValidity();
});
nameInput.addEventListener("invalid", () => {
if (nameInput.value === "") {
nameInput.setCustomValidity("¡Introduce tu nombre de usuario!");
} else {
nameInput.setCustomValidity(
"El nombre de usuario solo puede contener letras mayúsculas y minúsculas. ¡Inténtalo de nuevo!",
);
}
});
El ejemplo se muestra así:
En resumen:
- Comprobamos el estado de validez del elemento de entrada cada vez que cambia su valor, ejecutando el método
checkValidity()a través del manejador del eventoinput. - Si el valor no es válido, se dispara un evento
invalidy se ejecuta la función manejadora de ese eventoinvalid. Dentro de ella determinamos, mediante un bloqueif (), si el valor no es válido porque está vacío o porque no coincide con el patrón, y establecemos un mensaje de error de validez personalizado. - Como resultado, si el valor del input no es válido cuando se presiona el botón de envío, se mostrará uno de los mensajes de error personalizados.
- Si es válido, el formulario se enviará con normalidad. Para que esto ocurra, hay que cancelar la validez personalizada invocando
setCustomValidity()con una cadena vacía. Por eso lo hacemos cada vez que se dispara el eventoinput. Si no lo haces, y previamente se había establecido una validez personalizada, el input se registrará como no válido aunque en el momento del envío contenga un valor válido.
Nota: Valida siempre las restricciones de entrada tanto en el lado del cliente como en el del servidor. La validación de restricciones no elimina la necesidad de validar también en el lado del servidor. Los navegadores antiguos o los usuarios malintencionados aún pueden enviar valores no válidos.
Nota:
Firefox admitía un atributo de error propietario,x-moz-errormessage, en muchas versiones, lo que permitía establecer mensajes de error personalizados de forma similar. Se eliminó a partir de la versión 66 (consulta el error 1513890 de Firefox).
Localización
Los valores de entrada permitidos para ciertos tipos de <input> dependen de la configuración regional. En algunas regiones, 1,000.00 es un número válido, mientras que en otras la forma válida de ingresar ese número es 1.000,00.
Firefox utiliza la siguiente heurística para determinar la configuración regional para validar la entrada del usuario (al menos para type="number"):
- Intenta con el idioma especificado por un atributo
lang/xml:langen el elemento o en cualquiera de sus ancestros. - Intenta con el idioma especificado en algún encabezado HTTP
Content-Language. O bien, - Si no se especifica ninguno, usa la configuración regional del navegador.
Accesibilidad
>Etiquetas
Al incluir inputs, es un requisito de accesibilidad añadir etiquetas junto a ellos. Esto es necesario para que quienes usan tecnologías de asistencia puedan saber para qué sirve el input. Además, al hacer clic o tocar una etiqueta se enfoca el control de formulario asociado. Esto mejora la accesibilidad y la usabilidad para los usuarios videntes, ya que aumenta el área en la que se puede hacer clic o tocar para activar el control. Resulta especialmente útil (e incluso necesario) en los botones de radio y las casillas de verificación, que son pequeños. Para más información sobre etiquetas en general, consulta Etiquetas.
A continuación se muestra un ejemplo de cómo asociar el <label> con un elemento <input> siguiendo el estilo anterior. Debes asignar al <input> un atributo id. El <label> necesita entonces un atributo for cuyo valor sea el mismo que el id del input.
<label for="peas">¿Te gustan los guisantes?</label>
<input type="checkbox" name="peas" id="peas" />
Tamaño
Los elementos interactivos, como los inputs de formulario, deben ofrecer un área lo bastante grande como para que resulte fácil activarlos. Esto ayuda a muchas personas, incluidas aquellas con dificultades de control motriz y quienes usan formas de entrada poco precisas, como un lápiz óptico o los dedos. Se recomienda un tamaño interactivo mínimo de 44×44 píxeles CSS.
Resumen técnico
| Categorías de contenido |
Flujo de Contenido, enlistado, enviable, restablecible, elemento asociado a formulario,
contenido de redacción. Si su type no es
hidden, entonces es elemento etiquetable y contenido palpable.
|
|---|---|
| Contenido permitido | Ninguno; es un elemento vacío. |
| Omisión de etiqueta | Debe tener etiqueta de apertura y no debe tener etiqueta de cierre. |
| Elementos padre permitidos | Cualquier elemento que acepte contenido de redacción. |
| Rol ARIA implícito |
|
| Roles ARIA permitidos |
|
| Interfaz DOM | HTMLInputElement |
Especificaciones
| Specification |
|---|
| HTML> # the-input-element> |