为啥 textarea 不是 input[type="textarea"]?

Posted

技术标签:

【中文标题】为啥 textarea 不是 input[type="textarea"]?【英文标题】:Why isn't textarea an input[type="textarea"]?为什么 textarea 不是 input[type="textarea"]? 【发布时间】:2011-08-03 23:39:30 【问题描述】:

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

【问题讨论】:

还有一个<select> 而不是<input type="select"><input> 只代表一个基本的输入元素。 type 属性只代表它所持有的值的类型。 【参考方案1】:

也许这有点太远了,但是……

另外,我想建议多行文本字段具有与单行字段(“文本”)不同的类型(例如“textarea”),因为它们确实是不同类型的事物,并暗示不同的问题(语义)用于客户端处理。

——Marc Andreessen, 11 October 1993

【讨论】:

是的,“不同的类型”,难道不能通过 blah blah \n \n blah 来实现吗?为什么要使用不同的标签? w3c 非常一致。这是在 w3c 之前 我想知道这是怎么得到这么多赞的。问题不在于 'text' 和 'textarea' 之间的区别,而在于将多行文本包含为 @Foreever 这是最直接的答案。之所以有 textarea 元素,是因为 Marc Andreessen 早在 1993 年 10 月就出于上述原因提出了它。 @Marcel Marc Andreessen 建议应该有一个不同的 type 而不是 taginput 标签的type 属性的不同值表示不同类型的输入,它们都共享一个相同的input 标签。所以不,这句话不是这个问题的答案。【参考方案2】:

这样它的值可以很容易地包含引号和 字符并尊重空格和换行符。

以下 html 代码成功传递了 w3c validator 并显示 和 & 而无需对其进行编码。它还尊重空白。

<!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>

【讨论】:

我更喜欢 w3c 起源神话。 Textarea 元素未定义为包含 CDATA,您仍然需要使用 &lt;&amp; 等实体。它只是为了它可以处理空白。 我刚刚测试过,是的,您可以将未编码的 和 & 放在文本区域中。它成功通过了 w3c 验证器。 @ktothez:见my answer。 这里没有一个正确的答案。与一般的生活(即,在盒子外)一样,有多种原因会导致事物成为现实。【参考方案3】:

textarea 可以包含多行文本,因此无法使用 value 属性预先填充它。

同样,select 元素必须是它自己的元素才能容纳 option 子元素。

【讨论】:

为什么不能用value attr 填充它?无论如何,在调整 textarea 的大小时,溢出会换行到下一行。 你不能在属性中使用换行符【参考方案4】:

这是技术在创建时的限制。 My answer copied over from Programmers.SE:

来自原HTML drafts之一:

注意:在表单的初始设计中,多行文本字段是 由 TYPE=TEXT 的 Input 元素支持。不幸的是,这 导致具有长文本值的字段出现问题。 SGML 的默认值 (参考数量集)将属性文字的长度限制为 只有 240 个字符。 HTML 2.0 SGML 声明增加了限制 最多 1024 个字符。

【讨论】:

【参考方案5】:

我知道这是一篇较旧的帖子,但认为这可能对任何想知道相同问题的人有所帮助:

虽然前面的答案无疑是有效的,但区分 textarea 和 input 有一个更简单的原因。

如前所述,HTML 用于描述和尽可能多地为 Web 内容(包括输入表单)提供语义结构。 textarea 可以用于输入,但是 textarea 也可以通过 readonly 属性标记为只读。这样一个属性的存在对于 input 类型没有任何意义,因此区分。

【讨论】:

这听起来很合理,除了input[type="text"] 也可以采用 readonly 属性。这有点奇怪,现在你指出来了! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly

以上是关于为啥 textarea 不是 input[type="textarea"]?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 IE 10 中 CSS 文本颜色会覆盖占位符颜色?

如何使用 jquery 在 input type="text" 和 textarea 之间切换

有没有一种简单的方法可以使 html textarea 和 input type text 一样宽?

input和textarea的区别

为啥 <textarea> 不自动关闭? [复制]

input,textarea的区别