button点击事件在不同的input按下回车键(没有窗体)

在“金额”input中按下“Enter”时,这个逻辑会触发,我不相信它(它不在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> 

脚本

 $("#btnShare").click(function (e) { // This logic is firing when pressing "Enter" in the "Amount" input }); 
  • Jquery:1.7.2
  • IE 9
  • (在Chrome中运行)

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

我今天遇到了这个问题。 IE假定,如果你在任何文本字段中按回车键,你想提交表格 – 即使这些字段不是表格的一部分,即使button不是“提交”types。

您必须用preventDefault()来覆盖IE的默认行为。 在你的jQueryselect器中,放入包含你想忽略回车键的文本框的div – 在你的情况下,“页”div。 而不是select整个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 } }); 

IE认为任何button元素都是一个提交button(不pipe你是否有form )。 它还处理按下表单元素中的Enter键作为隐式表单提交。 所以,因为它认为你正在试图提交你的表单,它会指出它将帮助你解决click事件(它认为是)的提交button。

您可以将input事件附加到inputbutton然后检查Enter键(例如e.which === 13 )并return false;

我遇到ASP.NET WebForms的这个问题:

 <asp:Button /> 

这不能通过添加type =“button”来解决,因为ASP.NET用type =“submit”replace它(如果检查元素,可以在浏览器中看到这种行为)。

在asp.net中这样做的正确方法是添加

 <asp:Button UseSubmitBehavior="false" /> 

到button。 ASP会自动添加type =“button”属性。

每个button都是基于jQuery的解决scheme是:

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

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