按下回车键时如何提交表格?


84

有人可以告诉我如何在按下回车键并且表单中没有按钮时提交HTML表单吗? 提交按钮不存在。我使用的是自定义div而不是那个。

Answers:


60

IMO,这是最干净的答案:

<form action="" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password"/><br/>
  <div class="yourCustomDiv"/>
  <input type="submit" style="display:none"/>
</form>

更好的是,如果您使用javascript通过自定义div提交表单,则还应该使用javascript创建表单,并在按钮上设置display:none样式。这样,禁用了javascript的用户仍将看到“提交”按钮,然后可以单击它。


已经注意到display:none会导致IE忽略输入。我创建了一个新的JSFiddle示例,该示例以标准形式开始,并使用逐步增强功能来隐藏提交并创建新的div。我确实使用了StriplingWarrior的CSS样式。


7
上述方法在IE中不起作用。IE会忽略隐藏的提交按钮。
Chuck Phillips 2010年

@ChuckPhillips答案已更新为一个新示例,该示例也应在IE中正常工作。
克里斯·马拉斯蒂·乔治

1
我在Safari(5.1.2)中尝试了此操作,但它不起作用。我只是停留在同一页面上。我尝试删除“ display:none”样式。而且有效!似乎Safari需要显示“提交”按钮。

3
在Chrome版本19.0.1084.56中均无法使用-提交按钮必须可见才能正常工作。有关可在Chrome,Safari和IE中运行的可靠修补程序,请参见下面的StriplingWarrior答案。
user2398029 2012年

86

要在按下Enter键时提交表单,请按照以下步骤创建一个javascript函数。

function checkSubmit(e) {
   if(e && e.keyCode == 13) {
      document.forms[0].submit();
   }
}

然后将事件添加到所需的任何范围,例如div标签上:

<div onKeyPress="return checkSubmit(event)"/>

无论如何,这也是Internet Explorer 7的默认行为(可能也是早期版本)。


1
看起来好像是Firefox弹出窗口阻止程序抓住了这个= |。
约翰,

4
我更喜欢“ keyup”,这样按下回车键的动作不会多次触发。
贾斯汀·斯基尔斯

54

我尝试了各种基于javascript / jQuery的策略,但始终遇到问题。当用户使用Enter键从浏览器的内置自动完成列表中进行选择时,意外提交是最新出现的问题。我终于切换到此策略,该策略似乎可以在我公司支持的所有浏览器上使用:

<div class="hidden-submit"><input type="submit" tabindex="-1"/></div>
.hidden-submit {
    border: 0 none;
    height: 0;
    width: 0;
    padding: 0;
    margin: 0;
    overflow: hidden;
}

这类似于Chris Marasti-Georg当前接受的答案,但是通过避免使用display: none,它似乎可以在所有浏览器上正常工作。

更新资料

我在上面的代码中进行了编辑,以包含否定字,tabindex因此不会捕获Tab键。尽管从技术上讲这无法在HTML 4中验证,但HTML5规范包含的语言可以使其以大多数浏览器已经实现的方式工作。


14

使用<button>标签。根据W3C标准:

使用BUTTON元素创建的按钮的功能类似于使用INPUT元素创建的按钮,但是它们提供了更丰富的呈现可能性:BUTTON元素可能具有内容。例如,包含图像功能的BUTTON元素类似于并且可能类似于类型设置为“ image”的INPUT元素,但是BUTTON元素类型允许内容。

基本上有另一个标签<button>,它不需要的JavaScript,也可以提交一个表单。可以使用<div>标记(包括<img />button标记内部)样式化很多样式。<input />标签中的按钮几乎没有灵活性。

<button type="submit">
    <img src="my-icon.png" />
    Clicking will submit the form
</button>

在上设置三种类型<button>; 它们映射到<input>按钮类型。

<button type="submit">Will submit the form</button>
<button type="reset">Will reset the form</button>
<button type="button">Will do nothing; add javascript onclick hooks</button>

标准品

我使用<button>标签 还有一点 样式以获取色彩鲜艳且功能丰富的表单按钮。请注意,可以为例如<a class="button">共享<button>元素样式链接的CSS编写CSS 。


9

我相信这就是您想要的。

//<![CDATA[

//Send form if they hit enter.
document.onkeypress = enter;
function enter(e) {
  if (e.which == 13) { sendform(); }
}

//Form to send
function sendform() {
  document.forms[0].submit();
}
//]]>

每次按下一个键,就会调用enter()函数。如果按下的键与Enter键(13)相匹配,则将调用sendform()并发送第一个遇到的表单。这仅适用于Firefox和其他符合标准的浏览器。

如果您认为此代码有用,请务必投票支持我!


1
如果用户要在提交表单之前移入新行怎么办?
ʀʀʏ2012年

7

这是我使用jQuery的方法

j(".textBoxClass").keypress(function(e)
{
    // if the key pressed is the enter key
    if (e.which == 13)
    {
        // do work
    }
});

其他javascript也不会太不同。捕获正在检查键参数“ 13”,这是回车键


我在代码中使用@ [Sean](#29951)的答案,除了我发现自己也必须抓住e.which == 10
travis

6

使用以下脚本。

<SCRIPT TYPE="text/javascript">
<!--
    function submitenter(myfield,e)
    {
        var keycode;
        if (window.event) keycode = window.event.keyCode;
        else if (e) keycode = e.which;
        else return true;

        if (keycode == 13)
        {
            myfield.form.submit();
            return false;
        }
        else
            return true;
    }
//-->
</SCRIPT>

对于用户点击回车时应提交表单的每个字段,请按以下方式调用submitenter函数。

<FORM ACTION="../cgi-bin/formaction.pl">
    name:     <INPUT NAME=realname SIZE=15><BR>
    password: <INPUT NAME=password TYPE=PASSWORD SIZE=10
       onKeyPress="return submitenter(this,event)"><BR>
<INPUT TYPE=SUBMIT VALUE="Submit">
</FORM>

2

我使用这种方法:

<form name='test' method=post action='sendme.php'>
    <input type=text name='test1'>
    <input type=button value='send' onClick='document.test.submit()'>
    <input type=image src='spacer.gif'>  <!-- <<<< this is the secret! -->
</form>

基本上,我只是添加了图像类型的不可见输入(其中“ spacer.gif ”是1x1透明gif)。

这样,我可以使用“发送”按钮或仅通过键盘上的Enter提交此表单。

这是把戏!


1
问题是询问如何提交表单而不显示提交按钮。
Marco Demaio 2014年

0

您为什么不只将div提交样式应用于提交按钮?我敢肯定有一个JavaScript的,但这会更容易。


使用jQUery UI按钮,我有同样的问题。使用这些小部件,您可以选择向按钮添加一个漂亮的小图标(如果愿意,甚至可以添加2个)。但是,如果您使用输入标签作为提交按钮,则此选项不起作用。因此,您必须使用a或span或div。
皮埃尔·亨利



0

扩展答案,这对我有用,也许有人会觉得有用。

HTML

<form method="post" action="/url" id="editMeta">
   <textarea class="form-control" onkeypress="submitOnEnter(event)"></textarea>
</form>

s

function submitOnEnter(e) {
  if (e.which == 13) {
    document.getElementById("editMeta").submit()
  }
}

-1

与Chris Marasti-Georg的示例类似,只是使用内联javascript。本质上,将onkeypress添加到要使用Enter键的字段中。本示例对密码字段起作用。

<html>
<head><title>title</title></head>
<body>
  <form action="" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password" onkeypress="if(event.keyCode==13) {javascript:form.submit();}" /><br/>
  <input type="submit" onClick="javascript:form.submit();"/>
</form>
</body>
</html>

这不是问题所要的。目标是在没有提交按钮的情况下提交...
杰森

-1

由于display: none按钮和输入在Safari和IE中不起作用,因此我发现,最简单的方法(无需额外的JavaScript技巧)就是<button />在表单中添加一个绝对位置并将其放置在屏幕之外。

<form action="" method="get">
  <input type="text" name="name" />
  <input type="password" name="password" />
  <div class="yourCustomDiv"/>
  <button style="position:absolute;left:-10000px;right:9990px"/>
</form>

自2016年9月起,此功能适用于所有主要浏览器的当前版本。

显然,它建议(并且在语义上更正确)以按需设置样式<button/>


您不强调JavaScript技巧,但提出CSS技巧。
进行了改革

-2

默认情况下,使用“自动对焦”属性可为按钮提供输入焦点。实际上,单击表单内的任何控件也可以使表单集中注意力,这是表单对RETURN作出反应的要求。因此,如果用户从未单击表单中的任何其他控件,则“自动对焦”将为您执行此操作。

因此,如果用户在单击RETURN之前从未单击任何窗体控件,则“自动对焦”将起到至关重要的作用。

但是即使这样,在没有JS的情况下仍然需要满足两个条件:

a)您必须指定要转到的页面(如果留为空白,它将无法工作)。在我的示例中,它是hello.php

b)控件必须可见。您可以想象将其移出页面以隐藏,但不能使用display:none或visible:hidden。我所做的就是使用内联样式将其从页面左移200px。我将高度设置为0px,以使其不占用空间。因为否则,它仍然可能破坏上方和下方的其他控件。或者,您也可以浮动该元素。

<form action="hello.php" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password"/><br/>
  <div class="yourCustomDiv"/>
  <input autofocus type="submit" style="position:relative; left:-200px; height:0px;" />
</form>

下选民可以让我知道我的解决方案有什么异议吗?
realtimeguy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.