Почему textarea не является вводом [type = «textarea»]?

153

Почему <textarea>вместо элемента есть элемент <input type="textarea">?

Диого Кардосо
источник
1
Там, кстати, также <select>вместо <input type="select">. <input>Просто представляет собой основной элемент ввода. typeАтрибут просто представляет тип значения , которое он держит.
BalusC

Ответы:

176

Может быть, это будет слишком далеко назад, но ...

Кроме того, я хотел бы предложить, чтобы многострочные текстовые поля имели другой тип (например, «textarea»), чем однострочные поля («текст»), поскольку они действительно являются разными типами вещей и подразумевают разные проблемы (семантику) для обработка на стороне клиента.

- Марк Андреессен, 11 октября 1993 г.

завивать волосы щипцами
источник
18
Да, «другой тип», нельзя ли добиться того же самого через <input type = "textarea"> бла-бла \ n \ n бла </ input>? Почему отдельный тег?
Сергей
8
W3C довольно последовательный. это было до w3c
Марк Сидаде
10
Интересно, как это получило столько голосов. Вопрос не в разнице между text и textarea, а в причине включения многострочного текста в качестве тега <textarea>, а не в качестве атрибута type = textarea в тег <input>.
Навсегда
6
@ Впрочем, это прямой ответ. Причина, по которой есть textareaэлемент, заключается в том, что Марк Андреессен предложил его еще в октябре 1993 года по причинам, указанным выше.
Марсель
5
@Marcel Marc Andreessen предложил использовать другой тип, а не тег . Существуют разные типы ввода, обозначаемые разными значениями typeатрибута inputтега, и все они имеют один и тот же inputтег. Так что нет, эта цитата не является ответом на этот вопрос.
Петр Доброгост
69

Так что его значение может легко содержать кавычки и символы <> и учитывать пробелы и переводы строки.

Следующий HTML-код успешно проходит валидатор w3c и отображает <,> и & без необходимости их кодирования. Это также уважает пробелы.

<!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
Я бы предпочел миф о происхождении w3c.
к
9
TEXTAREA элементы не определены как содержащие CDATA, вам все еще нужно для использования лицами <, &и т.д. Это только так он может обрабатывать пробелы.
Квентин,
Я только что проверил это, и да, вы можете поместить незашифрованные <,> и & в текстовое поле. И он успешно прошел валидатор w3c.
Гийом Эскевен
@ktothez: Смотри мой ответ .
Марсель
2
Здесь нет одного правильного ответа. Как и в случае с жизнью в целом (т. Е. Вне коробки), существует множество причин, по которым что-то является таким, какое оно есть.
JohnK
49

A textareaможет содержать несколько строк текста, поэтому его нельзя будет предварительно заполнить с помощью valueатрибута.

Точно так же selectэлемент должен быть его собственным элементом для размещения optionподэлементов.

Марк Сидаде
источник
1
Почему нельзя было бы заполнить его valueатрибутом? Переполнение переносится на следующую строку при изменении размера в textareaлюбом случае.
OJFord
3
нельзя использовать разрывы строк в атрибутах
Mark Cidade
23

Это было ограничением технологии на момент ее создания. Мой ответ скопирован с сайта Programmers.SE :

Из одного из оригинальных черновиков HTML :

ПРИМЕЧАНИЕ. В исходном проекте для форм многострочные текстовые поля поддерживались элементом Input с TYPE = TEXT. К сожалению, это вызывает проблемы для полей с длинными текстовыми значениями. По умолчанию SGML (набор контрольных количеств) ограничивает длину литералов атрибута только 240 символами. Объявление SGML в HTML 2.0 увеличивает ограничение до 1024 символов.

Izkata
источник
6

Я понимаю, что это старый пост, но подумал, что это может быть полезно для всех, кто задает тот же вопрос:

Хотя предыдущие ответы, без сомнения, верны, есть более простая причина для различия между текстовой областью и вводом.

Как упоминалось ранее, HTML используется для описания и придания как можно большей семантической структуры веб-контенту, включая формы ввода. Текстовая область может использоваться для ввода, однако текстовая область также может быть помечена как доступная только для чтения с помощью атрибута только для чтения. Существование такого атрибута не имело бы никакого смысла для типа ввода и, следовательно, различия.

Час Защелка
источник
9
Это звучит разумно, за исключением того, что input[type="text"]может принимать атрибут readonly тоже. Что странно, теперь, когда вы на это указываете! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Мэтт