2

所以我又陷入了一场哲学辩论;

当您想要的只是文本输入时,您是否应该type为 an指定一个?input

的默认值type当然是text,因此省略默认属性可以实现您想要的并在标记中节省 12 个字节。

但是,我不禁觉得这有什么不对。一个真实的场景是实现一个库,比如Formalize;它不会触及没有明确types 的元素。

给我的替代方案是要么使用:not([type])它杀死 IE8 支持,要么将文本输入样式应用于所有inputs,然后为submits 和其他不应该看起来像文本框的人撤消它们。当仅编写typein 标记要简单得多时,这两种方法对我来说听起来都非常笨拙。

它还让我误以为浏览器会直到时间结束才知道你的意思而没有明确定义它。例如,随着 Windows 的成长,我只是认为 Times New Roman 是所有网页上的默认字体。然后我安装了 Ubuntu,我很惊讶。

不定义是不好的形式type吗?是否有任何令人信服的理由不定义它?除了我提到的那些之外,还有其他关于不指定type和依赖默认值的问题吗?此默认设置是否适用于旧版浏览器?非特定inputs 的可访问性如何?

4

6 回答 6

3

元素type不需要该属性。<input>正如您所说,它默认为text. 然而,尽管这些是 HTML 定义的语义,但一些工具并不尊重这一点。因此,明确指定它会更安全。

它还让我误以为浏览器会直到时间结束才知道你的意思而没有明确定义它。

它是由 HTML 规范明确定义的。没有属性的<input>元素type默认为 type text。除非以这种方式处理事情,否则浏览器不会正确呈现 HTML。您所做的唯一假设是这是未指定的行为。阅读规格。

例如,随着 Windows 的成长,我只是认为 Times New Roman 是所有网页上的默认字体。

不同之处在于没有规范将其定义为默认值。

于 2013-05-12T13:24:44.963 回答
3

根据规范,默认类型始终是文本,如您所说。如果我们要读取此内容,则这意味着默认值将“始终”为文本。我认为,出于正确性的目的,类型应该始终在元素中定义,如果没有出于可读性目的的其他原因。我也同意指定类型可以确保不会对元素的用途进行猜测,并且应该始终使用它。

话虽如此,我们是否总是在使用<script>标签时指定一种“文本/javascript”类型?我知道我不是所有的时间。

于 2013-05-12T13:26:22.523 回答
1

我每次都会定义类型属性,因为你永远不知道将来需要和使用什么样的库。

编写 'type="text"' 并不需要太多时间,但如果有任何外部代码需要,它可以为您节省大量时间。我想,问这个问题比写代码要花更多的时间。:)

在几年前的一个项目中,我曾经在模板中简化 PHP-Echo。一切正常,直到我用另一个不允许快捷方式的 PHP 配置更改主机。所以我不得不编辑我的整个代码,只是因为前几周我太懒了。它只是复制/粘贴,但是当你使用 Git 或 SVN 时它很烦人,因为突然几乎每个模板文件都被更新了。

于 2013-05-12T13:18:21.273 回答
1

我认为没有理由不包含该属性。就让浏览器运行良好并按预期呈现您的页面而言,具体化几乎总是更好。你在那里有控制权,为什么不使用它呢?

您提到额外的字节也很有趣,因为听起来这可能是您真正关心的问题,所以我认为这是针对大型站点的。话虽如此,与担心显式指定 type 属性相比,缩小源代码将获得更好的结果。

于 2013-05-12T13:31:24.647 回答
0

从 HTML5 开始,该属性type可以设置为以下值。我建议使用正确的 ,因为移动浏览器有时会根据其类型使用不同的键盘形式。但是不,如果你忽略这个属性,世界不会结束,它的默认值是文本。

话虽如此,如果不使用它,它将被设置为type="text"反正。我个人总是设置它,即使它设置为text.

  • 按钮
  • 复选框
  • 颜色
  • 日期
  • 约会时间
  • 本地日期时间
  • 电子邮件
  • 文件
  • 图片
  • 数字
  • 密码
  • 收音机
  • 范围
  • 重置
  • 搜索
  • 提交
  • 电话
  • 文本
  • 时间
  • 网址
  • 星期
于 2013-05-12T13:26:47.667 回答
-2

type属性不是必需的,但您将希望使用它来指定是否需要“按钮”、“密码”、“收音机”等。

于 2013-05-12T15:18:10.423 回答