【问题标题】:Why are forms not submitted if there is more than one unnamed input?如果有多个未命名的输入,为什么不提交表单?
【发布时间】:2012-01-17 17:34:08
【问题描述】:
<form method="POST" action="">
    <input type="text" />
    <input type="text" />
</form>

(JSFiddle)

input 上按回车键。然后删除inputs 之一并再次按下它。当我们在表单中有两个输入时,不会提交表单(然后我们需要一个按钮)。这是为什么呢?

【问题讨论】:

  • 您的代码示例似乎不完整,没有提交按钮。
  • @SteveRobillard:是的,我知道,所以这是我的问题。为什么有一个输入时提交,有两个输入时不提交。没有提交按钮。
  • 在真实的代码中,您是否命名输入字段?
  • @hey 您应该编辑您的问题以删除对以下事实的引用:如果不相关,则其中必须有一个表格。
  • @Andrew:我已经做到了。

标签: html forms


【解决方案1】:

具有单个输入的 HTML 表单的默认行为是在输入时提交。添加第二个输入后,按 Enter 将不再提交表单。名称的存在与否与此无关。

【讨论】:

  • 好像是这样,但我很难找到任何关于这种行为的规范。
  • @Damien_The_Unbeliever 我从 JQuery 站点看到了这个参考 根据浏览器的不同,如果表单只有一个文本字段,或者只有当有一个提交按钮时,Enter 键可能只会导致表单提交现在。
  • 我还想查看有关此行为的参考(如果存在)。就像@Damien_The_Unbeliever 一样,我在 HTML 规范中的任何地方都找不到它。
  • 终于从related question中找到了指向old spec的链接:“当表单中只有一个单行文本输入字段时,用户代理应接受在该字段中输入为提交表单的请求。”
  • 很好找到@Damien_The_Unbeliever。没想到它会一直埋在 HTML 2.0 规范中!
【解决方案2】:

最初的想法是非常简单的表单,通常只包含一个文本输入框,例如对于搜索,应该简单快捷:用户只需键入搜索词并按 Enter。其他类型的控件,例如复选框,不影响这一点。几乎所有浏览器都实现了这个想法。

但是,按照老思路,如果有多个文本输入框,过早提交表单的风险太大:用户按 Enter 键,期望进入下一个字段,或者可能只是偶然。

然而,IE 引入了(在 IE 4 中)使在文本输入框中 Enter 提交表单的功能,即使表单包含多个此类元素。后来,其他浏览器也纷纷效仿,如今这种(错误?)行为似乎是“标准的”。此功能已被声称是一种可用性改进,在某些特殊情况下,确实如此。更常见的是,这是一种风险,因此页面通常会尝试使用客户端脚本来防止它。

但是,至少在大多数现代浏览器上,这仅在表单具有提交按钮时才会发生。但是如果你省略了提交按钮,用户会感到困惑,因为大多数表单都有一个或多个提交按钮。

【讨论】:

    【解决方案3】:

    除非您在表单中的某处放置按钮或输入[type=submit]。如果您不希望它显示,可以将按钮包裹在可见性:隐藏的 css 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多