【问题标题】:Is action really required on forms?真的需要对表格采取行动吗?
【发布时间】:2012-03-13 04:16:05
【问题描述】:

这里说是必需的

http://www.w3schools.com/tags/att_form_action.asp

但我看到即使我没有指定操作属性,表单也会被提交,并且表单会被提交到当前页面,这正是我想要的。

【问题讨论】:

  • 注意:不要依赖 w3schools。它们不是可靠的来源。
  • 但是在这种情况下 w3schools 在 HTML 4 和 HTML 5 规范上都是正确的。在 HTML 4 中,他们将其列为必需(尽管大多数浏览器在没有它的情况下仍然可以工作),而在 html 5 中,他们将其列为不再需要:w3schools.com/html5/att_form_action.asp
  • 如果相关,您可以在 iframe 上提交表单:stackoverflow.com/a/26380651/1695680 这样既不会破坏表单的输入行为,也不会重新加载页面。
  • 我总是使用 Mozilla 参考文档(制作 Firefox 的人),developer.mozilla.org/en-US/docs/Web/HTML/Element/form 就像在搜索中添加前缀“mdn”一样简单。虽然要小心,因为“msdn”会将您带到通常与 w3 一样糟糕的 Microsoft Docs。

标签: forms html html-validation


【解决方案1】:

要求仅符合标准。完全有可能在页面上做任何你想做的事情而不遵循标准。如果您这样做,事情可能无法正常显示或工作,但很可能会。目标是关注他们,其理念是如果您关注他们,您的页面将始终正常工作;您不必担心任何事情。

是的,表单必须在 HTML4 中具有操作属性。如果未设置,浏览器可能会使用与提供空字符串相同的方法。你真的应该设置action="",它是完全有效的 HTML4,遵循标准,并获得相同的确切结果。

在 HTML5 中,您实际上可以在提交按钮本身上指定一个操作。如果没有,它将使用表单的操作,如果未设置,则默认为空字符串(请注意,您不能在 HTML5 中将操作显式设置为空字符串)。

【讨论】:

  • 另外一点,如果您选择省略 action 属性,我很确定它默认提交到同一页面。
  • @Chris:我说它可能会。我不能保证所有过去的浏览器,因为老实说我不知道​​旧浏览器做了什么。如果没有设置,这真的取决于浏览器,但我相信它们都会默认执行该操作。
  • 我不知道 2013 年写答案时的情况如何,但目前在 HTML5 中 action="" 是有效的......也没有 action 属性也可以
  • @instead 根据current HTML5 specification: "actionformaction 内容属性,如果指定,则必须具有一个有效的非空 URL 可能被空格包围。”
  • 谢谢你,我很懒,用 w3c 验证器检查了我的 HTML 代码,它没有给我任何警告
【解决方案2】:

看起来像the HTML4 spec requires it。我怀疑有些浏览器会做你想做的“让事情变得更容易”。我不建议依赖它。由于您处于未定义的行为中,因此浏览器可以合理地决定在没有action 的情况下提交表单时什么都不做。

您可以在遵循规范的同时通过将操作留空来获得所需的行为(因为它是相对的,空白表示当前页面):

<form action="" ...>

正如 bazmegakapa 所说,HTML5 规范 doesn't seem to require the action attribute

action 和 formaction 内容属性,如果指定,其值必须是有效的非空 URL,可能被空格包围。[强调添加]

有趣的是,这意味着在 HTML5 中,&lt;form action=""&gt; 无效,但不清楚是否需要没有操作的表单才能工作(提交到当前页面)。

【讨论】:

  • 这个问题有一个HTML5标签,这个答案是关于HTML4的。
  • @bažmegakapa 与其投票否决所有答案,不如发布您自己的答案并附上 HTML5 规范的链接。我同意 swannee 的观点,即整个“否决每个答案”而不是仅仅留下评论(或编辑建议)是不好的形式。我们的答案都是正确的,只是没有你想要的那么具体(而且我们都非常愿意通过更多信息来改进我们的答案)。
  • 投了反对票,因为答案是错误的并且传播了错误信息。删除了我的downvote,添加了upvote,谢谢。
【解决方案3】:

从技术上讲,这违反了 HTML 4 规范,但如果未指定任何操作,所有浏览器都会回发给响应的发起者。我同意依赖它不是一个聪明的主意,但它确实有效。

编辑:正如有人向我指出的那样,这个问题被标记为 HTML 5: 在 HTML 5 中,他们将 action 属性列为不再需要:http://www.w3schools.com/html5/att_form_action.asp,这符合 HTML 5 规范。

【讨论】:

  • 没有什么叫做 w3schools HTML 规范。 w3schools 与 w3c 无关,HTML 规范由 w3c 发布和维护。 w3schools 根本不是官方的,它只是一个包含一堆半技术信息和良好 SEO 的网站。执行 OP 要求的操作肯定不会违反 HTML5 规范(问题所询问的)。你总是攻击那些试图纠正你的人吗?我觉得你的行为不专业。
  • 我不想冒着让你头疼的风险,但这个问题与 HTML4 无关。这就是我想说的。我只是不希望未来的访问者发现错误信息。除了你表现得很幼稚之外,我对你没有任何意见。 HTML5 spec 4.10.3 The form element
  • 你怎么知道的? HTML 5 在标签中,但从未在问题中提及,而且标签中也只有纯 HTML....
  • 几个小时前我自己添加了纯 html。然后我会删除它以避免混淆。您可以查看编辑历史记录。
  • 抱歉,由于问题中未明确说明某些技术性问题,因此对增加对话的合理答案投反对票是一种糟糕的 SO 形式。此外,它也很重要,因为虽然它违反了 HTML 4 规范,但它实际上在所有支持 HTML 4 的主流浏览器中都可以使用。
【解决方案4】:

//线程复活提醒

延续 animuson 的回答...

如果在评估所有按钮formaction 和表单action 属性之后,如果“操作”仍然评估为“空字符串”,那么来自HTML5.2 规范部分4.10.21.3 点8 个状态:

如果 action 是空字符串,让 action 是文档的 URL 形成文件。

在提交表单时,这是您想要的。

【讨论】:

  • 这有点悖论。从字面上看,它说它可以是空的,elsewhere 它说action 必须是一个非空 URL。
  • @RedClover 请注意这些标准不一样 :) 假设w3.org 是真正的硬核官方标准,WHATWG 是他们经常在一起的现实生活标准,但是在 WHATWG 由于向后兼容性而变得更加仁慈的极端情况下可能会有所不同 :) 这就像臭名昭著的 &lt;center&gt; 标签 - 浏览器正式不支持,但它仍然有效 x)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2014-09-29
  • 2012-03-13
  • 2020-01-29
  • 2014-02-28
相关资源
最近更新 更多