¿Por qué textarea no es una entrada [type = "textarea"]?


153

¿Por qué hay un elemento en <textarea>lugar de <input type="textarea">?


1
Por cierto, también hay un en <select>lugar de <input type="select">. El <input>just representa un elemento básico de entrada. El typeatributo solo representa el tipo del valor que posee.
BalusC

Respuestas:


176

Tal vez esto está yendo demasiado atrás, pero ...

Además, me gustaría sugerir que los campos de texto de varias líneas tienen un tipo diferente (por ejemplo, "área de texto") que los campos de una sola línea ("texto"), ya que realmente son diferentes tipos de cosas e implican diferentes problemas (semántica) para manejo del lado del cliente.

- Marc Andreessen, 11 de octubre de 1993


18
Sí, "tipo diferente", ¿no podría haberse logrado lo mismo a través de <input type = "textarea"> bla, bla, \ n \ n, bla, </input>? ¿Por qué una etiqueta distinta?
Serhiy

8
w3c es bastante consistente. esto fue antes de w3c
Mark Cidade

10
Me pregunto cómo esto obtuvo tanto voto. La pregunta no es sobre la diferencia entre 'texto' y 'área de texto', sino la razón para incluir el texto de varias líneas como etiqueta <textarea> en lugar de como un atributo 'type = textarea' en la etiqueta <input>.
Foreever

66
@Foreever esta es una respuesta tan directa como es posible. La razón por la que hay un textareaelemento es porque Marc Andreessen lo propuso en octubre de 1993 por las razones citadas anteriormente.
Marcel

55
@Marcel Marc Andreessen sugirió que debería haber un tipo diferente, no etiqueta . Existen diferentes tipos de entrada denotados por diferentes valores de typeatributo de inputetiqueta y todos comparten una misma inputetiqueta. Entonces no, esta cita no es una respuesta a esta pregunta.
Piotr Dobrogost

69

Para que su valor pueda contener fácilmente comillas y caracteres <> y respetar espacios en blanco y nuevas líneas.

El siguiente código HTML pasa con éxito el validador w3c y muestra <,> y & sin la necesidad de codificarlos. También respeta los espacios en blanco.

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Yes I can</title>
</head>
<body>
    <textarea name="test">
        I can put < and > and & signs in 
        my textarea without any problems.
    </textarea>
</body>
</html>

16
Prefiero un mito de origen w3c.
k to the z

9
Textarea elementos que no se definen como CDATA que contiene, todavía se necesita para uso entidades <, &etc. Es sólo por lo que puede manejar espacios en blanco.
Quentin

Lo acabo de probar y sí, puedes poner <,> y & sin codificar dentro de un área de texto. Y pasó con éxito el validador w3c.
Guillaume Esquevin

@ktothez: Mira mi respuesta .
Marcel

2
No hay una respuesta adecuada aquí. Al igual que con la vida en general (es decir, fuera de una caja), hay múltiples razones para que algo sea como es.
JohnK

49

A textareapuede contener varias líneas de texto, por lo que no se podría rellenar previamente con un valueatributo.

Del mismo modo, el selectelemento debe ser su propio elemento para acomodar optionsubelementos.


1
¿Por qué no se podría rellenar con el valueatributo? El desbordamiento se ajusta a la siguiente línea al cambiar el tamaño de textareatodos modos.
OJFord

3
no puedes usar saltos de línea en los atributos
Mark Cidade

23

Era una limitación de la tecnología en el momento en que se creó. Mi respuesta se copió de Programmers.SE :

De uno de los borradores HTML originales :

NOTA: En el diseño inicial de los formularios, los campos de texto de varias líneas fueron compatibles con el elemento Input con TYPE = TEXT. Desafortunadamente, esto causa problemas para los campos con valores de texto largos. El valor predeterminado de SGML (Conjunto de cantidad de referencia) limita la longitud de los literales de atributo a solo 240 caracteres. La declaración HTML 2.0 SGML aumenta el límite a 1024 caracteres.


6

Me doy cuenta de que esta es una publicación anterior, pero pensé que podría ser útil para cualquiera que se pregunte la misma pregunta:

Si bien las respuestas anteriores son sin duda válidas, hay una razón más simple para la distinción entre textarea e input.

Como se mencionó anteriormente, el HTML se utiliza para describir y proporcionar la mayor estructura semántica al contenido web posible, incluidos los formularios de entrada. Se puede usar un área de texto para la entrada, sin embargo, un área de texto también se puede marcar como de solo lectura a través del atributo de solo lectura. La existencia de tal atributo no tendría ningún sentido para un tipo de entrada , y por lo tanto, la distinción.


9
Esto suena razonable, excepto que también input[type="text"]puede tomar el atributo de solo lectura . ¡Lo cual es un poco extraño, ahora que lo señala! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.