Firefox 4:HTML5 表单

Firefox 4 将提供更好的 HTML5 表单支持。在最新的 Beta 版本中,我们正在试验一系列新功能:更多输入类型(电子邮件、网址、电话、搜索)、新属性(占位符、自动聚焦、列表)、解耦表单和不同的验证机制。这主要得益于 Mounir Lamouri 的辛勤工作。

一些示例在其他浏览器中也能工作,但要查看所有示例,您需要使用 Firefox 4 Beta 版本。

新的输入字段类型

与新的 HTML5 元素一样,我们也有新的字段类型来更好地表达我们想要的输入类型。许多这些元素的外观和感觉与文本字段相同,但它们具有不同的语义含义。这意味着浏览器可以为用户优化体验。例如,移动浏览器可以为字段提供特定的键盘。或者浏览器可以根据通讯录中的人员预填充电话号码字段。扩展程序甚至可以根据这些类型提供一些功能。

在此 Beta 版本中,Firefox 提供了四种新的输入类型





在这四种新的输入类型中,urlemail 还会验证其内容。我们稍后会讨论这一点。

我们还支持一种新的字段类型


您可以使用此元素来表示页面中对表单交互做出反应的区域。例如,在您更改商品数量或送货选项后购物车中的总价。它不会计算任何内容,您需要使用 JavaScript 来完成,但它会为辅助技术提供提示。for 属性是参与计算的字段 ID 列表。

文本字段已通过 <datalist> 支持进行了改进。当用户输入时,您可以轻松地为字段提供建议列表。您可以使用 list 属性绑定字段和数据列表。它将使用 datalist 内的每个 option 元素来填充列表。对于不支持 datalist 的浏览器,它们将显示 datalist 元素的内容。因此,请确保提供一些有效的标记以获得良好的回退。




  or
  

新的输入属性

自动聚焦

将此属性添加到字段时,它将尽快获得焦点。对用户的直接优势在于,所有网站都将具有相同的自动聚焦算法,而不是依赖于不同的 JavaScript 代码。如果用户对此不感兴趣,浏览器或扩展程序可以禁用此行为。


占位符

此属性的值将在表单为空且未聚焦时显示在表单内。您可以放置预期值的示例。




解耦表单

您有更多选项来定义字段和表单之间的交互。

form 属性

<input> 元素不再需要是 <form> 元素的子元素了。您可以将它们放置在任何您想要的位置,并使用新的 form 属性将它们绑定到表单。它接受应绑定到的表单的 ID。

这是一个示例。假设您正在为某些博客软件开发搜索引擎。您希望为一般用例提供一个非常简单的表单,如果用户需要更多控制,则提供一些高级选项。

您可以在页面顶部放置


并在底部放置

Advanced options Private posts

这将表现得好像搜索字段是表单的一部分一样。并且您可以自由地将其放置在 HTML 中的任何位置。

字段上的表单选项

可以在字段级别覆盖可以在表单级别定义的所有选项。所有提交字段(<button> 和 input type=”submit”)都接受四个新属性:formenctypeformactionformmethodformtarget

一个用例可能是包含预览和发布按钮的表单。每个按钮都需要表单的所有字段,但它们执行不同的操作。

当用户单击“预览”按钮时,其属性将覆盖表单的属性。在这种情况下,整个表单将使用 GET 方法发送到 preview.php 脚本,而不是发送 POST 请求到 new_post.php。

验证机制

表单改进的一个重要领域是验证。为了提供最佳体验,我们需要尽快向用户提供反馈。因此,人们编写了许多 JavaScript 代码来执行此操作。如果浏览器处理这些操作,岂不是更好吗?

required

通过添加此属性,您将标记此字段为必填。对于文本字段,这意味着它不应留空。对于复选框按钮,这意味着它应被选中。对于单选按钮,这意味着应选择组中的一个按钮。

尝试以下每个示例,您会看到它们在您与它们交互时会更改颜色。









url

URL 字段会自动验证。





email

电子邮件也会自动验证。通过传递 multiple 属性(在 type=”file” 上也有效),您还可以验证以逗号分隔的邮件列表。









pattern

您需要验证的不仅仅是 URL 和电子邮件类型的数据。因此,pattern 属性将允许您提供 JavaScript 正则表达式。这将与字段的值进行匹配以确定它是否有效。您还应该提供一个 title 属性来向用户解释模式。

在下面的示例中,尝试将鼠标悬停在文本字段上。您应该会看到一个弹出窗口,告诉您如何填写表单。



约束验证 API

如果您需要对验证进行更多控制,可以使用 setCustomValidity 方法。如果为此方法提供空字符串,则该元素将被视为有效。否则,它将被标记为无效,并且该字符串将用作工具提示以帮助您的用户理解问题。






如果表单的一个字段无效,则提交表单将被阻止,并且第一个无效字段将获得焦点,并显示一条消息来解释问题。如果要覆盖此行为并无论如何都发送表单,可以在表单上添加 novalidate 属性或在相应的提交按钮上添加 formnovalidate 属性。

如果您想了解有关验证机制的更多详细信息,请查看 Mounir 的博文

新的 CSS 选择器

为了配合所有这些优点,还有一些新的 CSS 选择器。

:required:optional

默认情况下,所有字段都标记为 :optional。如果它们具有 required 属性,则它们将改为匹配 :required 伪类。

:valid:invalid

这些伪类表示字段相对于验证的状态。您可以使用 :invalid 来覆盖 Firefox 4 提供的默认样式。

这是一个文本框的示例,其中已覆盖默认样式。



:-moz-placeholder

此伪类以显示占位符的输入字段为目标。这还不是 CSS 的一部分,因此您需要为基于 WebKit 的浏览器使用伪元素。



结论

HTML5 中的表单功能非常新,并且浏览器之间仍然存在很大差异。Opera 实现了一些规范(当时称为 Webforms2),因此它对 HTML5 表单提供了相当不错的支持,以及自该实现以来规范演变以来的一些怪癖。基于 WebKit 的浏览器目前正在实现规范的某些部分,因此您也会在那里发现一些早期支持。

我们不会在 Firefox 4 中添加更多表单功能,并且要获得对 HTML5 表单的完全支持,显然还需要做一些工作。新的字段类型(数字、颜色、日期)、新的属性(step、min、max)、新的事件(onforminput、onformchange)等等。我们将在以后的版本中添加对更多 HTML5 表单的支持。

这只是一个粗略的介绍。要获取所有详细信息,您应该访问 Mozilla 开发者网络上的文档

关于 Anthony Ricaud

Anthony Ricaud 的更多文章…


35 条评论

  1. mmc

    使用 Firefox 4 Beta 7 从 Planet 阅读此帖子时显示不正确:页面显示在第一个表单对之后中断,即使我在查看源代码时可以看到页面的其余部分。例如,Planet 页面右侧的名称列表根本没有显示。

    2010 年 11 月 11 日 12:19

    1. Anthony Ricaud

      糟糕,对此表示歉意。其中一个工具将 <textarea></textarea> 转换为 <textarea/>,并导致错误。

      我尝试了变通方法,我认为现在已修复。

      2010 年 11 月 12 日 05:09

      1. Jeff Walden

        在我看来似乎没有修复(但我确实看到了您尝试解决此问题的某些代码,查看源代码 ;-))。

        2010 年 11 月 15 日 03:07

  2. Josh

    我认为其他新的表单字段尚未添加,这很遗憾,因为它们本来非常有用。

    但即便如此,我还是对取得如此巨大的进步感到高兴。我对 HTML5 表单真的很兴奋;它们有可能极大地改善 Web 上的交互式体验。

    2010 年 11 月 11 日 12:24

  3. Peter

    干得好,伙计们!我一直期待着 v4 中的这些功能,因为我已经实现了它们中的很多。:)

    2010 年 11 月 11 日 12:27

  4. Fred

    +1
    当前的工作将很好地利用缺失的字段,唉。
    但无论如何,我仍然感谢迄今为止所做的辛勤工作。

    2010 年 11 月 11 日 16:38

  5. Ryan

    很高兴看到 Mozilla 在 Firefox 中的 HTML5 表单章节取得了令人惊叹的进展。

    :-moz-ui-invalid/valid 是否将在即将发布的 Beta 版本中上线?

    2010 年 11 月 11 日 17:41

    1. Anthony Ricaud

      是的,它应该在下一个 Beta 版本中。

      2010 年 11 月 12 日 05:17

  6. SchizoDuckie

    太棒了!input type=range 本机输入类型是否也会很快推出?我们需要 Web 浏览器中的本机滑块。

    2010 年 11 月 11 日 20:13

  7. Eli Grey

    为什么电子邮件地址不会使用 RFC 2822 语法默认验证?IPv6 主机、非标准端口上的主机、顶级域名和本地主机(例如 n@ai(是的,这是一个真实的电子邮件地址))、方括号(与 IPv6 和端口结合使用)以及无数其他合法方案不受支持。

    2010 年 11 月 12 日 00:08

    1. Richard Milewski

      我觉得 DATALIST 在 SELECT 元素中不起作用很奇怪。这是 HTML5 规范的问题,还是仅仅是实现顺序问题(因为许多 HTML5 表单语法似乎正在开发中)。

      2011 年 3 月 17 日 11:44

  8. Eli Grey

    哦,我刚刚阅读了 HTML5 表单规范,并了解到这是因为规范要求的语法不足。忽略我的问题。

    2010 年 11 月 12 日 00:12

  9. fflorent

    我发现了这种奇怪的行为。此输入已通过 Mozilla Firefox 验证

    这是正常的吗?

    2010 年 11 月 12 日 00:30

  10. jpvincent

    对于那些现在想开始使用 HTML5 语法,但又想在所有浏览器上提供功能的人,目前只有一个不错的 JavaScript 库旨在做到这一点

    我还没有在 FF4 引入的所有新内容上对其进行测试,但如果您想将其引入生产环境,那么它是您目前最好的选择
    http://code.google.com/p/webforms2/wiki/ImplementationDetails

    在本文列出的内容中,它将在所有浏览器中模拟
    – 占位符(不带样式)
    – 约束验证
    – 验证(不带样式)
    – 自动聚焦
    以及 FF 尚未实现的其他内容

    2010 年 11 月 12 日 01:57

    1. alexander farkas

      @jpvincent
      这个项目 (webforms2) 确实很棒,但开发在 2008 年暂停了。该脚本无法处理 WebKit 浏览器的部分/错误实现(无交互式表单验证),我认为它无法真正处理 FF4 的部分实现。

      您可以在 http://afarkas.github.com/webshim/tests/submit-test.html#noCapableBugfixes 中找到交互式验证的简单测试。如果取消第一个复选框的选中状态,则 WebKit 中的交互式验证将得到修复。(不使用浏览器嗅探)。

      Zoltan Dulac 做了一些更改,以使其与 Chrome 兼容(http://www.useragentman.com/blog/2010/07/27/cross-browser-html5-forms-using-modernizr-webforms2-and-html5widgets/),但此更改并非完全可靠(无功能检测/简单的浏览器嗅探,在不知道 WebKit 团队何时修复此错误的情况下)。(https://bugs.webkit.org/show_bug.cgi?id=28649)

      @Anthony Ricaud
      forminput/formchange 事件未实现,因为正在讨论将其从规范中删除。(https://bugzilla.mozilla.org/show_bug.cgi?id=605997)

      @Mounir Lamouri
      很棒的工作。我昨天用 FF4 的一些新的表单、ES5 和 CSS3 功能编写了一个小脚本。它很有趣
      http://jsfiddle.net/trixta/ucVXN/

      2010 年 11 月 12 日 03:11

  11. Genixon

    您好,我今天非常高兴,因为……?:P

    2010 年 11 月 12 日 06:52

  12. Marz

    有没有办法让 pattern 属性忽略大小写?

    我从
    http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#the-pattern-attribute

    中了解到这是根据规范的,但关于为什么不允许忽略大小写有任何见解吗?

    还有没有其他原因导致 pattern 属性无法扩展到 textarea(也许还可以扩展正则表达式的 g + m 选项),从而允许对 textarea 进行验证?

    2010年11月15日 00:51

    1. Vitaliy Kupets

      您可以使用 w 符号来匹配两种情况。如果您想要检查一个字符串是否匹配某个模式(真/假),您实际上并不需要“g”标志。
      Textarea 的 pattern 属性很有意义,我也想知道为什么它不存在。如果它被实现了,您最终真正需要的唯一标志将是“m”,但您也可以通过查找“n”来解决这个问题。

      2010年11月22日 07:59

  13. fflorent

    我写的 HTML 代码没有发送。我写的是,如果您添加一个 type='URL' 的 INPUT,Firefox 会验证用户是否输入了“http:mozilla.org”(这似乎是一种奇怪的行为)
    http://pastebin.mozilla.org/852446

    2010年11月15日 03:54

  14. JO Tosoni

    您好,

    是否有计划使用以下方式支持带有摄像头和麦克风输入的表单?
    input type=file accept=somemedia/*;capture=somedevice ?

    2010年11月19日 06:41

    1. Anthony Ricaud

      这方面有一些正在进行的工作,但这不适用于 Firefox 4。https://bugzilla.mozilla.org/show_bug.cgi?id=451674

      2011年1月15日 06:25

  15. sarmen

    我看到 Opera 也做了同样的事情。可悲的是,我们现在必须等待 Safari、Chrome 和 IE 追赶上来,并使这种设置成为所有用户计算机上的默认设置。这将需要很长时间 :(

    2010年12月15日 15:29

    1. Anthony Ricaud

      HTML5 表单的设计理念是优雅降级。因此,您可以开始使用这些控件。在支持这些新功能的浏览器中,您将获得最佳的行为,并且您的表单在其他浏览器中仍然可以使用。

      2011年1月15日 06:11

  16. Jon

    有人知道 HTML 5 是否会包含一个真正的组合框吗?datalist 似乎更像是一个自动完成文本框。如果 HTML 5 中不包含可编辑组合框,在我看来这真是荒谬的。

    2011年1月1日 12:30

  17. Muhammad Irfan

    现在的浏览器功能真是令人惊叹。我希望人们能开始使用这些浏览器,而不是像 IE 6 这样的旧浏览器。这将使 Web 开发人员的生活更轻松。我也希望其他浏览器尽快赶上来,尤其是 IE 9、Chrome 和 Safari。

    2011年1月15日 02:32

  18. grade

    我试过,Mozilla 无法查看,
    否则 Opera 可以做到。

    2011年2月12日 09:15

  19. lee

    膨胀软件!

    2011年3月4日 01:50

  20. Andrea Barghigiani

    您好,Anthony,
    这篇文章真的很有用!如果您不介意的话,我打算将您的文章作为我为社区创建的一篇文章的模板!

    关于这一点,您能否告诉我,在 FF4 的公开发布版本中,您是否为我们喜爱的浏览器添加了更多元素或更多功能?

    我尝试在 Mozilla 开发者网络上查看规范,但那里的信息或多或少都相同。

    感谢您的帮助!
    Andrea

    2011年3月31日 00:42

    1. Anthony Ricaud

      您好,Andrea,

      据我所知,自这篇博文发布以来,Firefox 4 中没有新的功能。当然有一些调整和修复,但没有重大更新。

      请继续翻译。并留下评论以告知我们网址。

      2011年3月31日 06:55

      1. Andrea Barghigiani

        非常感谢您的帮助和善意!我一定会告诉您在哪里可以找到翻译(大约在四月中旬)!

        顺便说一句……我正在尝试您在这篇文章中展示的每个新功能,但目前我无法使 datalist 元素正常工作。

        我将我使用的代码粘贴到此链接中 http://paste.pocoo.org/show/363225/

        我是否遗漏了什么?
        再次感谢!

        2011年3月31日 07:55

        1. Andrea Barghigiani

          顺便说一句,我正在运行 Firefox 的公开发布版本 (4.0),我应该尝试使用夜间构建版本吗?
          (抱歉重复评论!)

          2011年3月31日 07:58

  21. Brian LePore

    很久以前我就为我们的表单构建库构建了对这些功能的支持。看到它们最终出现在 Firefox 中真是太好了……我发现的唯一问题是,在提交时未填写必填消息的警告消息不会随着页面滚动。:-p

    2011年3月31日 11:17

  22. Si Grady

    我的网站上有一个 html5 表单,但在 Firefox(所有版本)中,用户无法选择输入框来输入数据。只有当您发送空白表单时,光标才会通过验证显示在文本字段中。
    它在其他浏览器中按要求工作,有什么想法吗?

    2011年4月5日 13:37

  23. florian

    当使用 type=url 或 type=email 等时,FF4 会自动用红色边框/背景阴影样式包裹输入。我不希望有这种样式。有没有办法禁用此行为?

    谢谢!

    2011年4月27日 07:58

    1. Ryan

      那是 :invalid 伪类,只需设置 input:invalid { box-shadow: none; }

      2011年4月27日 16:19

本文的评论已关闭。