为什么带有一个文本INPUT的FORM在输入时提交,而有一个带有两个文本INPUT的FORM不提交?

时间:2013-07-22 20:42:11

标签: javascript html forms

我刚刚发现按Enter键时会自动提交只包含一个INPUT(非隐藏)的FORM。

但是当按下回车时,包含至少两个INPUTS(未隐藏)的表单将不会提交。

(所有脚本都没有提交/按钮/输入[type = submit])

看看这个jsfidle。这种行为有解释/标准吗?

<form id="form1" method="POST">
    <p>Does submit:</p>
    <input type="text" placeholder="focus and press enter"/>
</form>

<form id="form2" method="POST">
    <p>Does <strong>not</strong> submit:</p>
    <input type="text" placeholder="does not submit"/>
    <input type="text" placeholder=""/>
</form>

3 个答案:

答案 0 :(得分:25)

此行为是在HTML 2.0规范中引入的。有关详细信息,请参阅以下文章:

Form submission and the ENTER key?

  

当表单中只有一个单行文本输入字段时,   用户代理应接受该字段中的Enter作为提交请求   表格

来源:W3C Specs

答案 1 :(得分:4)

这是一个特定于浏览器的实现。 。 。默认情况下,某些版本的IE实际上不会这样做,但Firefox和其他一些浏览器认为适合假设,对于带有一个文本框的表单,用户(或页面设计者)总是希望表单提交来自该领域的Enter

实际上已经有多次我必须围绕它进行编码。 。 。在我看来,这是一个比较值得怀疑的浏览器设计决策。

修改

如果您有兴趣,可以为您的问题提供更细微的答案。 。 。显然不同的浏览器(及其不同的版本)在这种特定情况下有不同的行为,包括它们是否提交,是否发生click事件等。如果你愿意,我可以提供更多信息的链接喜欢阅读更多。

但简短的回答是,它实际上是有意的,如果不是跨浏览器一贯支持的话。

答案 2 :(得分:1)

添加以下内容应该可以在IE中使用。

&#13;
&#13;
$(document).ready(function() { 
    $('input,select').keypress(function(event) { return event.keyCode != 13; }); 
  });
&#13;
&#13;
&#13;