首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按enter键时表单未提交

按enter键时表单未提交
EN

Stack Overflow用户
提问于 2010-11-17 00:53:05
回答 6查看 58.7K关注 0票数 37

我有以下HTML/JS/jQuery代码。此代码表示以模态方式呈现给用户以允许用户登录的登录表单。问题是,当我按回车键时,表单似乎没有执行"onsubmit“事件。当我单击作为表单底部的按钮(实际上与onsubmit事件具有相同的代码)时,它可以完美地工作。我想知道有没有人能告诉我为什么这个表格没有提交..?任何帮助都将不胜感激。

显示登录模式的jQuery代码:

代码语言:javascript
复制
showDivAndFocus('loginModal','loginaccount'); 

function showDivAndFocus(v,t){

    if (api)
        if (api.isOpened)
            api.close();

    api = $('#'+v).overlay({
        mask: {color: '#000000'}, 
        top:'0px',
        api: true,
        autoScrollToActive: false,
        autoScrollOffset: 0 
    }).load();

    document.getElementById(t).focus();
}

HTML代码

代码语言:javascript
复制
<div class="modal" id="loginModal">
    <h2>User Login</h2>
    <br />

    <form action="javascript:void(0);" onsubmit="return(doLogin());"  name="loginForm" id="loginForm">
        <table width="95%" cellpadding="4" cellspacing="4">
        <tr>
        <td class="regw" align="left"><b>Account Number:</b></td>
        <td class="regw" align="left"><input type="text" maxlength="10" size="10" name="loginaccount" id="loginaccount" /></td>
        </tr>

        <tr>
        <td class="regw" align="left"><b>Username:</b></td>
        <td class="regw" align="left"><input type="text" maxlength="20" size="20" name="loginusername" id="loginusername" /></td>
        </tr>

        <tr>
        <td class="regw" align="left"><b>Password:</b></td>
        <td class="regw" align="left"><input type="password" maxlength="20" size="20" name="loginpassword" id="loginpassword" /></td>
        </tr>  

        <tr>
        <td class="regw" align="left"><b>Remember Me:</b></td>
        <td class="regw" align="left"><input type="checkbox" name="loginremember" id="loginremember" /></td>
        </tr>  

        <tr><td colspan="2">
            <div>  
                <center>
                    <table><tr><td width="50" valign="middle">
                        <div id="loginLoading" style="height:24px;width:24px;"></div>   
                    </td><td>
                        <button onclick="doLogin();" type="button" class="ok">Submit</button>
                    </td><td>
                        <button onclick="api.close();" type="button" class="cancel">Cancel</button>
                    </td><td width="50">&nbsp;</td></tr></table>
                </center>
            </div>
        </td></tr> 
        </table>
    </form>
</div>

AJAX调用

代码语言:javascript
复制
function doLogin(){
    var ajax = getXmlObject();
    var f = getFormVariables();
    var url= '/login.php?f=' + encodeURIComponent(f);
    if (ajax.readyState == 4 || ajax.readyState == 0) {
        ajax.open("POST", url, true);
        ajax.onreadystatechange = function () {
            if (ajax.readyState == 4) {
                var a = ajax.responseText;
                if (a=="OK"){...} else {...}
            }
        };
        ajax.send(null);
      }
      return false;
 }
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-17 00:55:26

您有两个选择:

  1. 为enter按钮创建一个事件处理程序,并将其添加到绑定中。
  2. 在窗体中的某处使用<input type=submit>,这就是您想要的自动Enter键行为。
票数 37
EN

Stack Overflow用户

发布于 2016-02-06 08:25:46

我也在为同样的问题而苦苦挣扎;我的一个表单在文本字段中按"enter“时正在提交,没有任何问题;同一页上的另一个类似的表单根本不会提交,这是我的一生。

这两个字段都没有提交按钮,也没有使用javascript进行任何提交。

我发现,当表单中只有一个文本字段时,在文本字段中按“enter”将自动提交;但如果有多个(常规(即单行)文本输入)字段,它什么也不做,除非还有某种“提交”按钮。

显然,这是HTML 2.0 specification的一部分

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

An old, but apparently still valid, and interesting, further discussion here

...显然,这是一种提交简单查询的便捷方式,但在复杂的表单上,降低了在尝试填写时过早提交查询的风险。众多浏览器实现者(例如Netscape、Opera、各种版本的Lynx等)遵循了这个建议,尽管它似乎有稍微不同的解释。

我做了a JSFiddle to demonstrate。据我所知(懒惰地用Chrome测试),如果只有一个文本域,或者如果有一个提交按钮,即使它是隐藏的,表单也会在"Enter“上提交。

(编辑:我后来发现,如果有其他不是常规的单行文本输入的输入域,它似乎也可以工作……例如,that _that、select等--感谢@user3292788提供的信息。更新了JSFiddle以反映这一点)。

代码语言:javascript
复制
<h2>Form with one text field only, no submit button</h2>
<p>Seems to submit automatically when pressing 'enter' in the first text field</p>
<form action="" method="post">
  <div>
    <label for="pt-search-input">Search</label>
    <div>
      <input name="term" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a></div>
  </div>
</form>

<h2>Form with two text fields, no submit button</h2>
<p>Won't submit when pressing 'enter' in the forms ...</p>
<form action="" method="post">
  <div>
    <label for="pt-search-input">Search</label>
    <div>
      <input name="term" type="text" placeholder="Example: budapest amsterdam" />
      <input name="term2" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a></div>
  </div>
</form>



<h2>Form with two text fields and a submit button ...</h2>
<p>Now it submits with 'enter' key</p>
<form action="" method="post">
  <div>
    <label for="pt-search-input">Search</label>
    <div>
      <input name="term" type="text" placeholder="Example: budapest amsterdam" />
      <input name="term2" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a>
      <input type="submit" />
    </div>
  </div>
</form>

<h2>Form with two text fields and a HIDDEN submit button ...</h2>
<p>Seems to work, even with submit hidden ...</p>
<form action="" method="post">
  <div>
    <label for="pt-search-input">Search</label>
    <div>
      <input name="term" type="text" placeholder="Example: budapest amsterdam" />
      <input name="term2" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a>
      <input type="submit" />
    </div>
  </div>
</form>


<h2>Form with no action or method attribute, HIDDEN submit button ...</h2>
<p>Even this seems to work.</p>
<form>
  <div>
    <label for="search-input">Search</label>
    <div>
      <input name="term" type="text" placeholder="Example: budapest amsterdam" />
      <input name="term2" type="text" placeholder="Example: budapest amsterdam" /> <a href="#pt-search-bar">cancel</a>
      <input type="submit" />
    </div>
  </div>
</form>

<h2>Form with multiple fields, but only one text input, no submit button.</h2>
<p>This seems to work as well.</p>
<form action="" method="post">

  <p><input type="text" ></p>

  <textarea name="" id="" cols="30" rows="10"></textarea>

  <p>
    <select name="" id="">
      <option value="">Value</option>
    </select>
   </p>
</form>
票数 49
EN

Stack Overflow用户

发布于 2014-01-11 21:46:40

它也可以来自表单中绑定到<button>的javascript。例如,如果您有

代码语言:javascript
复制
<button id='button'>Reset</button>
<span id="textToReset">some info</span>

<script type="text/javascript">
$('#button').bind('click', function(){  
    $('#textToReset').text('');     
    return false;
})
</script>

您的Enter按钮将被return false捕获到某处,并且您的表单将不会在Enter键下提交。正确的方法是将<button>动作指定为按钮。这样:

代码语言:javascript
复制
<button id='button' type="button">Reset</button>

并删除您放在那里的return false,以防止该按钮提交表单。;-)

为了便于学习,默认情况下<button>类型是submit。如果希望它们充当窗体的控件,则必须指定type="button"type="reset" See w3.org about it

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4196681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档