当在“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
});
答案 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
事件附加到input
或button
,并检查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():
}
以上内容适用于所有情况,例如跨浏览器,正常点击和标签流。