【问题标题】:Hitting enter does not invoke javascript function in HTML form按 Enter 不会调用 HTML 表单中的 javascript 函数
【发布时间】:2011-02-25 00:11:58
【问题描述】:

我有一个带有一个输入字段的简单表单。当我使用提交时它工作正常,但在文本字段中按 Enter 会重新加载带有 URL 中的表单变量的页面。

我浏览了许多在线可用的解决方案(JQuery 除外,因为对于这么简单的事情似乎有点过分了),但无法让“输入”工作。任何帮助都会很棒

<form name="myform" action="" method="GET" > Enter text: <br>
  <input type="text" name="queryinput" onkeyup="if(isEnterPressed(event)){initialize(this.form.queryinput.value);}"><P>
  <input type="button" name="Search" value="Search" onClick="initialize(this.form.queryinput.value);">
  <input type="submit" value="Reset" onclick="reset();" />
</form>

function isEnterPressed(e){
  var keycode=null;
  if (e!=null){
    if (window.event!=undefined)    
      if (window.event.keyCode) keycode = window.event.keyCode; 
      else if (window.event.charCode) keycode = window.event.charCode;
    }else{
            keycode = e.keyCode;
    }
  }
return (keycode == 13);}

编辑 1:使用 onsubmit 代替键码侦听器的版本:

<form name="myform" action="" onsubmit="return initialize(this.form.queryinput.value)"  method="GET"> Enter text:<br>
<input type="text" name="queryinput">
<input type="submit" value="submit" >
<input type="button" value="Reset" onclick="clearAllPoints();"/>
</form>

使用 onSubmit 会导致点击按钮的行为与按 Enter 相同,但两个版本都不起作用。

【问题讨论】:

  • 在表单中使用 enter 将提交表单,我错过了什么吗?
  • 我想是一个错字,但你用

    关闭第一个输入:P

  • 我不明白你的关键代码:if 语句永远是真的!
  • @Nick 我想要表单调用函数initialize 而不是默认设置
  • @Bakaburg 我实际上关闭了它......

    只是为了化妆品。 keyup 代码来自类似问题的解决方案之一 - 我不太确定它的工作原理。

标签: javascript forms


【解决方案1】:

尝试将the onSubmit event 用于form,而不是onClick 事件用于input 元素。似乎onClick 仅在被鼠标物理单击时才会触发(这是有道理的,我猜我从未遇到过这样的情况)。但是,无论表单如何提交,onSubmit 事件都应该触发。

【讨论】:

  • 我想投票让你达到 10,000,但你还差 12 分。
  • @darkporter:我很欣赏这种情绪,这有点令人兴奋:)
  • 订阅 form.submit 而不是 button.click 更容易获得。鼠标点击,回车键,iPhone“Go”按钮,其他我们还没想到的提交表单的方式,如果你听提交,你就会被覆盖。
  • @darkporter:当然。当然,最好将代码与标记分开,并在外部而不是直接在 HTML 中订阅事件。
  • 我之前也尝试过使用 onSubmit 但无法正常工作。我正在使用表单获取地址以在同一页面上加载谷歌地图而不刷新它。 onSubmit 是否仅用于加载新页面的情况?请在问题中找到我的更新代码。
【解决方案2】:

如果您将字段设置在表单之外,则在您按 Enter 时它不会自动提交表单。然后,您可以让按钮将输入字段中的文本复制到实际表单中的隐藏字段,然后提交。

--编辑,添加代码--

Enter text:<br>
<input type="text" id="myinputfield">
<form name="myform" id="myform" action="" method="GET">
  <input type="hidden" name="queryinput" id="queryinput">
  <input type="button" value="Submittal button" onclick="doSubmitForm();" />
</form>
<script type="text/javascript">
  function doSubmitForm(){
    itm1 = document.getElementById('myinputfield');
    itm2 = document.getElementById('queryinput');

    if (!itm1 || !itm2) return false;

    //You could put form input verification here

    itm2.value = itm1.value;
    document.forms["myform"].submit();
  }
</script>

【讨论】:

  • 我不知道如何修改表单以反映这一点 - 请指点我的例子或提供一个简单的例子?
  • 感谢您的示例。我尝试使用它,它解决了按回车键导致页面重新加载的问题。不幸的是,当我按下回车键时它仍然没有提交表单 - 我每次都必须手动单击提交按钮。
猜你喜欢
  • 2013-01-12
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2018-02-27
相关资源
最近更新 更多