【问题标题】:Form submit on enter needs at-least one input type = "text" element输入时表单提交需要至少一种输入类型 =“文本”元素
【发布时间】:2015-03-27 04:49:00
【问题描述】:

我观察到表单元素应该至少需要一个 input type = "text" 元素才能在输入时提交表单。

这是我的代码:

<form ng-submit="executeFunc()">
  <input type="text"/>
  <input type="submit"/>
</form>

但是,如果我们没有第一个输入类型="text" 元素,而是有单选按钮或选择框、复选框怎么办。 如果是这种情况,那么如何在输入时提交表单。

我想知道是不是按照 W3C 标准,我们需要提供至少一种输入类型的“文本”元素?

【问题讨论】:

    标签: javascript html angularjs forms


    【解决方案1】:

    每次按下enter 键时,只需在提交按钮上触发click 事件。

    $(document).keypress(function (e) {
      if (e.keyCode === 13) {
        $('input[type="submit"]').click();
      }
    });
    

    http://jsfiddle.net/1eLyeghh/1/

    【讨论】:

    • 请注意 event.which 已弃用,应使用 event.keyCode 代替。也可以考虑document.forms[0].submit()
    • 这似乎是对原始问题的正确答案(现在也已修改为包含另一个问题)。也可以使用document.forms[0].submit(),但它会导致绕过正常的 HTML 表单提交操作(HTML5 表单数据验证、onsubmit 处理程序)。
    • @bardzusny : 我想知道它是否符合 W3C 标准,我们需要提供至少一种输入类型的“文本”元素?
    • @robiee - 不,每个
      本身“不需要”包含至少一个文本 &lt;input&gt;
    • @bardzusny——很好,但是如果没有输入类型提交,或者有按钮类型提交怎么办?我想另一种方法是在表单上手动发送提交事件。
    【解决方案2】:

    关于添加的问题“根据 W3C 标准,我们需要提供至少一种输入类型的“文本”元素?”,答案是没有 HTML 规范要求表单是可提交的完全按 Enter 键。规范只是(模糊地)描述了浏览器可能做什么。

    最初的想法是,您可以通过在填写输入字段后按 Enter 来提交仅包含一个文本输入字段(可能还有单选按钮和复选框)的表单。这被认为对于简单的表单(通常是搜索表单或订阅表单)很有用,可以让用户更快地完成操作。

    后来,这个想法经常扩展到具有多个文本输入字段的表单。这通常会导致问题,因为用户可能会在填写他应该填写的所有字段之前按 Enter。然而,这就是现代浏览器通常的行为方式(前提是表单中有一个提交按钮)。

    HTML5 遵循传统,只是描述了浏览器可能会做什么,尽管通过在Implicit submission 部分中强烈推荐(但不要求符合)常见行为来偏离传统:

    如果用户代理支持让用户隐式提交表单 (例如,在某些平台上,在输入文本时按“回车”键 字段集中隐式提交表单),然后这样做 其默认按钮具有定义的激活行为的表单必须导致 用户代理在该默认值上运行合成点击激活步骤 按钮。

    [...]

    注意: Web 上的某些页面只有在有方法时才能使用 隐式提交表单,因此强烈建议用户代理 支持这个

    (关于原始问题,答案是您需要在 JavaScript 中处理此类事情,@bardznusny 的回答显示了一种简洁的方式。)

    【讨论】:

    • 回复:“……前提是表单中有提交按钮”。在 Safari、Firefox、Chrome 和 OmniWeb 中进行的测试表明,不需要提交按钮,只需输入一个文本即可。
    • 非常感谢@Jukka K. Korpela,
    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 2015-06-12
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多