为什么textarea不是input[type="textarea"]?

162
为什么会有一个 <textarea> 元素而不是 <input type="textarea">

2
顺便提一下,还有一个<select>可以代替<input type="select"><input>只是表示基本的输入元素。type属性只是表示它所持有的值的类型。 - BalusC
5个回答

177

也许这有点太遥远了,但是...

此外,我想建议多行文本字段使用不同的类型(例如 "textarea")而不是单行字段("text"),因为它们确实是不同类型的东西,并且暗示客户端处理的不同问题(语义)。

马克·安德烈森 (Marc Andreessen),1993年10月11日


20
“不同类型”可通过<input type="textarea">等方式实现,为什么需要一个独立的标签? - Serhiy
8
W3C非常一致。这是在W3C之前的事情。 - Mark Cidade
11
我不知道这个问题为什么获得了这么多赞。问题不在于“text”和“textarea”的区别,而是关于为什么将多行文本作为<textarea>标签而不是<input>标签中的“type=textarea”属性。 - Foreever
8
这就是最直接的回答了。 textarea 元素之所以存在,是因为马克·安德森在1993年10月提出了这个想法,原因如上所述。 - Marcel
6
马塞尔·马克·安德里森建议应该有不同的输入类型而不是标签。不同类型的输入由input标记的type属性的不同值来表示,它们都共享同一个input标记。因此,这段引用并不是对这个问题的答案。 - Piotr Dobrogost
显示剩余4条评论

72

为了让其值轻松包含引号、尖括号字符并保留空格和换行符。

以下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的起源神话。 - k to the z
9
文本区域元素没有被定义为包含 CDATA,因此您仍然需要使用实体来处理 <& 等特殊字符。这样做只是为了处理空格。 - Quentin
我刚刚对此进行了测试,是的,你可以在文本区域中放置未编码的<, >和&符号。并且它能够成功地通过w3c验证器。 - Guillaume Esquevin
那绝对是可能的:/ 我认为@Marcel有正确的答案。 - Guillaume Esquevin
2
这里没有一个正确的答案。就像生活一样(即在盒子外面),事情变成现在这个样子有多种原因。 - JohnK
如果你在textarea元素中放置了</textarea>,它显然不会起作用,所以是的,你需要转义textarea元素内部的所有内容。 - Matthew

51

一个 textarea 可以包含多行文本,所以无法使用 value 属性来预填充文本。

同样,select 元素需要成为自己的元素来容纳 option 子元素。


1
为什么不能使用“value”属性填充它?无论如何,当调整“textarea”的大小时,溢出都会换行。 - OJFord
4
属性中不能使用换行符。 - Mark Cidade

24

这是在当时技术设计上的局限性。以下是我从Programmers.SE中转载的回答:

在最初的HTML草案中,对于多行文本输入框的支持采用了Input元素和TYPE=TEXT的方式。然而,这种方式会导致长文本值的字段出现问题。SGML的默认(参考数量集)将属性字面量的长度限制为仅有240个字符。HTML 2.0的SGML说明将这一限制增加到1024个字符。


7
我知道这是一篇较旧的文章,但认为以下内容对于任何想了解同样问题的人可能会有所帮助:
虽然之前的回答无疑是有效的,但textarea和input之间的区别有一个更简单的原因。
如先前所述,HTML用于尽可能描述和赋予Web内容语义结构,包括输入表单。Textarea可以用于输入,但也可以通过readonly属性标记为只读。这种属性的存在对于input类型没有意义,因此产生了区别。

11
除了 input[type="text"] 可以使用 readonly 属性外,其他的都是合理的。不过,现在你指出来了,这似乎有点奇怪!具体可以参考 http://www.w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly 。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接