Javascript 空格并输入“;点击";输入';他很专注。如何禁用此行为?

Javascript 空格并输入“;点击";输入';他很专注。如何禁用此行为?,javascript,jquery,html,Javascript,Jquery,Html,在chrome和firefox(可能还有其他浏览器)中,如果你有一个输入焦点,按“空格”和“回车”键可以为你点击它们。我正在制作一个HTML5游戏,我想重写space和enter对焦点的反应,默认行为正在妨碍我。有没有办法在大多数浏览器中关闭此默认行为 演示问题 <button>Button<button> $("button").on("click", function(event) { alert("Clicked"); }); 按钮 $(“按钮”)。在(“单击”上

在chrome和firefox(可能还有其他浏览器)中,如果你有一个输入焦点,按“空格”和“回车”键可以为你点击它们。我正在制作一个HTML5游戏,我想重写space和enter对焦点的反应,默认行为正在妨碍我。有没有办法在大多数浏览器中关闭此默认行为

演示问题

<button>Button<button>
$("button").on("click", function(event) { alert("Clicked"); });
按钮
$(“按钮”)。在(“单击”上,函数(事件){alert(“Clicked”);});

如果单击该按钮,它将显示良好的警报。但如果在单击后按“空格”或“回车”,它也会发出警报。我想阻止这种行为,这样我就可以在没有他们干预的情况下自己写了

检查按钮是否处于活动状态:

$("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')


检查按钮是否处于活动状态:

$("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')

您可以使用修复此问题。这将返回按钮被单击的次数。如果按enter键,则返回0,因为您单击了0次;如果通过鼠标单击,则返回您单击按钮的次数

要访问
event.detail
,您需要访问原始事件对象。这可以通过jQuery事件对象中的
event.originalEvent
完成。因此,如果您只是在脚本中添加一个if语句:

if (event.originalEvent.detail != 0) {
    //your click event code
}
然后,只有通过鼠标实际单击按钮,它才会运行

这比检查按钮是否有焦点要准确得多,因为当您单击按钮时,按钮会自动聚焦,这样做会在单击一次后禁用按钮。

您可以使用来修复此问题。这将返回按钮被单击的次数。如果按enter键,则返回0,因为您单击了0次;如果通过鼠标单击,则返回您单击按钮的次数

要访问
event.detail
,您需要访问原始事件对象。这可以通过jQuery事件对象中的
event.originalEvent
完成。因此,如果您只是在脚本中添加一个if语句:

if (event.originalEvent.detail != 0) {
    //your click event code
}
然后,只有通过鼠标实际单击按钮,它才会运行


这将比检查按钮是否具有“聚焦”(focus)更加准确,因为当您单击按钮时,按钮会自动聚焦,这样做会在单击一次后禁用按钮。

其他选项是在单击对象后立即模糊对象:

<button id="mybutton" onclick="myFunction();this.blur();">button</button>
按钮
我发现该解决方案更易于使用,因为它需要更少的代码行,并获得相同的结果:
当按钮模糊时,它与键盘事件没有联系,这就解决了问题。

其他选项是在单击对象后立即模糊对象:

<button id="mybutton" onclick="myFunction();this.blur();">button</button>
按钮
我发现该解决方案更易于使用,因为它需要更少的代码行,并获得相同的结果:

当按钮模糊时,它与键盘事件没有联系,这就解决了问题。

fiddle对我不起作用/行为类似于osx上的op fiddle/chrome@johnSmith我建议他为mouseup替换click事件。原来的代码还在那里。哈哈,我没注意到,为什么stackoverflow没有包含一些js提琴一样的东西呢?对我来说,“空间”仍然在“点击”警告。@tieTYT仅供参考:似乎有很多线程在回答为什么preventDefault在Firefox中的表现不同。fiddle对我不起作用/行为类似于osx上的op fiddle/chrome@johnSmith我建议他为mouseup替换click事件。旧代码仍然存在。哈哈,我没有注意到,为什么stackoverflow没有包含一些js fiddle之类的东西对我来说,“space”仍在发出“click”警报。@tieTYT仅供参考:似乎有很多线程在回答为什么preventDefault在Firefox中的表现不同。如果你有自己的键盘事件处理程序,确保它们返回
false
以防止默认操作。@Barmar哦,这可能就是我正在寻找的答案for@Barmar
返回false有点过分,因为它也会触发
事件。stopPropagation()
event.preventDefault()
是OP需要的。@Barmar你的建议似乎对我都不管用。查看我的更新:现在当我按空格键时,它会同时启动两个按钮。@Johan你的建议对我不起作用。请参阅,当我按空格键时,两个get处理程序都会被触发。如果您有自己的键盘事件处理程序,请确保它们返回
false
,以防止默认操作。@Barmar哦,这可能就是我正在寻找的答案for@Barmar
返回false有点过分,因为它也会触发
事件。stopPropagation()
event.preventDefault()
是OP需要的。@Barmar你的建议似乎对我都不管用。查看我的更新:现在当我按空格键时,它会同时启动两个按钮。@Johan你的建议对我不起作用。当我按下空格键时,两个get处理程序都会被触发。我创建了一个jsfiddle,显示即使在firefox中也可以使用:不过我不知道如何使用这些信息。在我的keydown处理程序中,我是否应该翻转if语句,使其检查
==0
?@tieTYT如果您想添加一个处理程序来按空格键或enter键,您只需在该
if
语句之后创建一个
else
语句,就像我所做的那样。如果您还想在其他按键上触发,那么您可以像平常一样使用keypress事件处理程序。
event.detail
是,因此在按键(或keydown或keydup等)事件中不需要它。PS:您错误地关闭了标签。它应该是
。我创建了一个JSFIDLE,表明即使在