在chrome和firefox(以及其他人)中,如果你有一个聚焦的输入,按“空格”和“输入”会为你点击它们。我正在制作一个HTML 5游戏,我想重写空间和输入对焦点的反应,默认行为正在妨碍我。有没有办法在大多数浏览器中关闭此默认行为?
Here's a jsfiddle证明了这个问题。
<button>Button<button>
$("button").on("click", function(event) { alert("Clicked"); });
如果单击该按钮,则会显示良好的警报。但如果您在单击后按“空格”或“输入”,它也会发出警报。我想防止这种行为,这样我就可以在没有干扰的情况下编写自己的行为。
答案 0 :(得分:2)
您可以使用event.detail
解决此问题。这将返回单击按钮的次数。如果按Enter键,则返回0,因为您单击了0次,如果您通过鼠标单击它,则返回单击按钮的次数。
要访问event.detail
,您需要访问原始事件对象。这可以通过jQuery事件对象中的event.originalEvent
来完成。所以,如果你只是在脚本中加上if语句:
if (event.originalEvent.detail != 0) {
//your click event code
}
然后只有在您通过鼠标实际点击按钮时才会运行。
这比检查按钮是否有:focus
要准确得多,因为当您点击它时按钮会自动聚焦,所以这样做会在单击后禁用按钮。
答案 1 :(得分:1)
检查按钮是否处于活动状态:
$("button").on("click", function(event) { alert("Clicked"); });
$(document).on('keydown', function(e){
if($(document.activeElement).is('button') &&
(e.keyCode === 13 || e.keyCode === 32))
e.preventDefault();
});
您还可以使用jQuery的:focus
选择器,该选择器应返回相同的元素$(':focus').is('button')
。
答案 2 :(得分:0)
其他选项是单击后立即模糊对象:
<button id="mybutton" onclick="myFunction();this.blur();">button</button>
我发现该解决方案更易于使用,因为它需要更少的代码行,并获得相同的结果: 当按钮模糊时,它与键盘事件没有联系,这解决了问题。