按下返回键时如何提交表单?

时间:2008-08-27 11:56:50

标签: javascript html

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

15 个答案:

答案 0 :(得分:81)

要在按下回车键时提交表单,请沿着这些行创建一个javascript函数。

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

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

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

这也是Internet Explorer 7的默认行为(尽管可能是早期版本)。

答案 1 :(得分:53)

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忽略输入。我创建了一个new JSFiddle example作为标准表单开始,并使用渐进增强来隐藏提交并创建新div。我确实使用了StriplingWarrior中的CSS样式。

答案 2 :(得分:52)

我尝试了各种基于javascript / jQuery的策略,但我一直遇到问题。当用户使用回车键从浏览器的内置自动完成列表中进行选择时,出现的最新问题涉及意外提交。我终于切换到了这个策略,这似乎适用于我公司支持的所有浏览器:

<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规范包含的语言使其能够像大多数浏览器已经实现它一样工作。

答案 3 :(得分:13)

使用<button>标记。从W3C标准:

  

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

基本上还有另一个标记<button>不需要javascript ,也可以提交表单。它可以采用<div>标记(包括按钮标记内的<img />)的样式。 <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">链接将css写入<button>元素的样式。

答案 4 :(得分:8)

我相信这就是你想要的。

//<![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()。如果按下的键与回车键(13)匹配,则将调用sendform()并发送第一个遇到的表单。这仅适用于Firefox和其他符合标准的浏览器。

如果您觉得此代码有用,请务必投票给我!

答案 5 :(得分:7)

以下是我使用jQuery

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

其他javascript也不会太差异。 catch检查keypress参数为“13”,这是回车键

答案 6 :(得分: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>

答案 7 :(得分: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>

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

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

这就是诀窍!

答案 8 :(得分:0)

为什么不直接将div提交样式应用于提交按钮?我确定这里有一个javascript,但这会更容易。

答案 9 :(得分:0)

如果您使用的是asp.net,则可以使用表单上的defaultButton属性。

答案 10 :(得分:0)

我认为你应该有一个提交按钮或提交图像...你有使用“提交div”的具体原因吗?如果您只想要自定义样式,我建议<input type="image"...http://webdesign.about.com/cs/forms/a/aaformsubmit_2.htm

答案 11 :(得分:0)

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

HTML

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

Js

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

答案 12 :(得分:-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>

答案 13 :(得分:-1)

由于display: none按钮和输入在Safari和IE中不起作用,我发现最简单的方法是没有额外的javascript hacks ,只需添加一个绝对定位的{{ 1}}到表格并远离屏幕。

<button />

截至2016年9月,这适用于所有主流浏览器的当前版本。

显然,它只是根据需要调整<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> 的样式(而且在语义上更正确)。

答案 14 :(得分:-2)

使用&#34;自动对焦&#34;属性用于默认情况下为按钮提供输入焦点。实际上,单击表单中的任何控件也会关注表单,这是表单对RETURN做出反应的要求。所以,&#34;自动对焦&#34;如果用户从未点击过表单中的任何其他控件,那么会为您做到这一点。

所以,&#34;自动对焦&#34;如果用户在点击RETURN之前从未点击过任何表单控件,则会产生重要的区别。

但即便如此,在没有JS的情况下仍然需要满足2个条件:

a)你必须指定一个要去的页面(如果留空则不能工作)。在我的例子中,它是hello.php

b)控件必须可见。您可以想象将其移出页面隐藏,但您不能使用display:none或visibility: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>