116

在“金额”输入中按“Enter”时会触发此逻辑,我认为它不应该(它不在 Chrome 中)。我怎样才能防止这种情况发生,如果在 IE 中没有防止这种情况发生,请处理它以使 click 事件中的逻辑不会触发。

<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>

脚本

$("#btnShare").click(function (e) {
    // This logic is firing when pressing "Enter" in the "Amount" input
});
  • jQuery:1.7.2
  • 即 9
  • (在 Chrome 中工作)
4

6 回答 6

338

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

于 2012-11-23T19:10:07.550 回答
34

我今天遇到了这个问题。IE 假设如果您在任何文本字段中按下回车键,您想要提交表单——即使这些字段不是表单的一部分并且即使按钮不是“提交”类型。

您必须使用 preventDefault() 覆盖 IE 的默认行为。在您的 jQuery 选择器中,放入包含要忽略回车键的文本框的 div ——在您的情况下,是“页面”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
    }
});
于 2012-10-31T20:01:12.403 回答
4

我在使用 ASP.NET WebForms 时遇到了这个问题:

<asp:Button />

这不能仅通过添加 type="button" 来解决,因为 ASP.NET 将其替换为 type="submit"(如果您检查元素,您可以在浏览器中看到此行为。)

在 asp.net 中执行此操作的正确方法是添加

<asp:Button UseSubmitBehavior="false" />

到按钮。ASP 将自动添加 type="button" 属性。

于 2016-07-06T01:19:52.843 回答
3

IE 认为任何button元素都是一个提交按钮(不管你有form没有)。它还将Enter表单元素中的键按下处理为隐式表单提交。因此,由于它认为您正在尝试提交表单,它认为它会帮助您并click在(它认为的)提交按钮上触发事件。

您可以将keyup事件附加到inputbutton并检查Enter键 ( e.which === 13) 和return false;

于 2012-09-07T20:55:34.107 回答
1

为每个按钮执行此操作的基于 jQuery 的解决方案是:

 $('button').prop('type', 'button'); // To prevent IE from treating every button as a submit and firing a click() event

然而,由于某种原因,点击事件仍会冒泡到父元素......

于 2014-04-29T23:29:09.373 回答
0

对于 Chrome,您可以添加<button type="submit" style="display:none"/> 因为在 chrome 中默认按钮类型是“提交”

对于 IE ,我尝试与type="button"(在 IE 中默认按钮类型为“按钮”)相同,但效果不佳。

所以这是解决方案。在 HTML(keypress)=xxx($event)中添加表单。在 TS 中,

xxx(event) {
 if(event.key === 'Enter' && event.target.type !== 'submit')
event.preventDefault():
}

以上将适用于跨浏览器、正常点击和标签流等所有场景。

于 2020-05-27T07:27:28.980 回答