在不同输入中按Enter键时按钮单击事件触发(无表格)

con*_*att 109 jquery internet-explorer

当在"金额"输入中按"输入"时,此逻辑会触发,我不相信它(它不在Chrome中).如何防止这种情况,如果不在IE中阻止它,请处理它,以便点击事件中的逻辑不会触发.

<html>
 <body>
   <div id="page">
     <div id="financed_amount">
      <h1>Financed Amount:</h1>
      <input type="text" id="amount" value="" />
     </div>
     <h1>Finance Options</h1>
     <div>
      <a id="shareLink" rel="leanModal" name="email" href="#email"></a>
      <button id="btnShare" class="share">Share this report</button>
     </div>
    </div>
   </body>
</html>
Run Code Online (Sandbox Code Playgroud)

脚本

$("#btnShare").click(function (e) {
    // This logic is firing when pressing "Enter" in the "Amount" input
});
Run Code Online (Sandbox Code Playgroud)
  • Jquery:1.7.2
  • IE 9
  • (适用于Chrome)

小智 314

我遇到了同样的问题并通过向元素添加type="button"属性来解决它<button>,IE通过该元素将按钮视为一个简单的按钮而不是提交按钮(这是<button>元素的默认行为).

  • 愿你活一千年. (105认同)
  • 我遇到了与Firefox相同的问题.type ="button"属性也为我解决了这个问题 (5认同)
  • 在短短几周内两次被这个问题咬了一口.只是在一个`<button>`元素中调用`type ="button"`感觉很奇怪.哈哈...... :)希望下次再记得这个. (5认同)
  • 优秀的修复.我认为浏览器只会在<form>标签内的"Enter"时自动提交.但我觉得我错了. (4认同)
  • 在IE9大吼大叫的日子(在我对其他事情大吼大叫之间我不得不大喊大叫)这就是解决方案.热点. (2认同)

小智 31

我今天遇到了这个问题.IE假定如果您在任何文本字段中按Enter键,您想要提交表单 - 即使字段不是表单的一部分,即使该按钮不是"提交"类型.

您必须使用preventDefault()覆盖IE的默认行为.在你的jQuery选择器中,放入包含你要忽略的输入键的文本框的div - 在你的情况下,"page"div.您也可以指定要特别忽略的文本框,而不是选择整个div.

$('#page').keypress(function(e) {
    if(e.which == 13) { // Checks for the enter key
        e.preventDefault(); // Stops IE from triggering the button to be clicked
    }
});
Run Code Online (Sandbox Code Playgroud)