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

时间:2012-09-07 20:39:08

标签: jquery internet-explorer

当在“Amount”输入中按“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)

6 个答案:

答案 0 :(得分:312)

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

答案 1 :(得分: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
    }
});

答案 2 :(得分:3)

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

<asp:Button />

这不能通过添加type =&#34; button&#34;来解决。因为ASP.NET用type =&#34替换它;提交&#34; (如果检查元素,可以在浏览器中看到此行为。)

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

<asp:Button UseSubmitBehavior="false" />

按钮。 ASP会自动添加type =&#34;按钮&#34;属性。

答案 3 :(得分:2)

IE认为任何button元素都是提交按钮(无论您是否有form)。它还处理表单元素中Enter键的压制,作为隐式表单提交。因此,由于它认为您正在尝试提交表单,因此它认为它可以帮助您解决click事件(它认为是什么)提交按钮。

您可以将keyup事件附加到inputbutton,并检查Enter密钥(e.which === 13)和{{1} }

答案 4 :(得分:1)

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

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

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

答案 5 :(得分: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():
}

以上内容适用于所有情况,例如跨浏览器,正常点击和标签流。