2013-07-22 109 views
16

我刚刚发现只有一个输入(不隐藏)的FORM会在按Enter键时自动提交。为什么有一个文本输入的FORM输入,而有两个文本INPUT的输入不能输入?

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

(脚本都没有一个提交/按钮/输入[类型=提交]内)

看看这个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> 
+0

如果添加'输入型= submit'到第2的形式,它会提交。我正在寻找关于它的标准 –

回答

23

此行为是在HTML 2.0规范中引入的。请参见下面的文章的详细信息:

Form submission and the ENTER key?

当在一个表单只有一个单行文本输入域, 用户代理应该接受在这一领域,以提交 请求输入形式

来源:W3C Specs

+0

我已经冒着在这里复制规格的相关部分的自由。好的答案,upvoted –

+0

您的更新改进了答案 - 谢谢! –

+2

这必须是WWW历史上最大的WTF之一。直到你找到规范并理解为什么这样做。然后它是美好的xD – anddoutoi

4

这是一个浏览器特定的实现。 。 。某些版本的IE实际上并未默认这样做,但Firefox和其他一些浏览器似乎认为,对于带有一个文本框的表单,用户(或页面设计者)总是希望表单提交来自该字段的Enter

实际上有很多次,我不得不围绕它编码。 。 。在我看来,这是更令人怀疑的浏览器设计决定之一。

编辑:

有更细致的回答您的问题,如果你有兴趣。 。 。显然不同的浏览器(以及它们的不同版本)在这种特定情况下有不同的行为,包括他们是否提交,是否发生事件等等。如果您想了解更多信息,可以提供更多信息的链接。 。

但简单的答案是,它实际上是有意的,如果不是跨浏览器持续支持的话。

1

添加以下应该在IE浏览器。

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

相关问题