Javascript 为什么按空格键会弹出模式?我如何预防它?

Javascript 为什么按空格键会弹出模式?我如何预防它?,javascript,jquery,html,twitter-bootstrap,modal-dialog,Javascript,Jquery,Html,Twitter Bootstrap,Modal Dialog,我计划在空格键上单击一个操作。它确实发生了 // when space bar is pressed do-something; // Applied on the $(document).keypress.. 但是,当我按下空格键时,以及必须触发的事件/操作,modal load/再次显示。为什么会这样?我已尝试阻止modal再次加载: $('#goal').on('hidden.bs.modal',function() { $(document).focus();

我计划在空格键上单击一个操作。它确实发生了

// when space bar is pressed
do-something; // Applied on the $(document).keypress..
但是,当我按下空格键时,以及必须触发的事件/操作,modal load/再次显示。为什么会这样?我已尝试阻止modal再次加载:

$('#goal').on('hidden.bs.modal',function() {
            $(document).focus(); // Get the button that triggered modal
                                 // out of focus                            

});
但是文档没有获得焦点,触发模式加载的按钮保持焦点,直到我点击屏幕使文档恢复焦点。如何防止modal在空格键压力机上再次加载


我还在触发modal的按钮上尝试了
blur()
函数。但这没用

如果没有看到更多的代码,或者更好的是,没有一个jsfiddle来演示您的问题,这就有点难回答

但一般来说,通过从jquery事件处理程序函数返回
false
,指示您已使用该事件,可以防止空格键产生任何副作用

因此(猜测事件处理程序的外观)


希望这有帮助。如果没有,请提供更多的细节。

如果没有看到更多的代码,或者更好的是,没有一个jsfiddle来演示您的问题,那么回答这个问题有点困难

但一般来说,通过从jquery事件处理程序函数返回
false
,指示您已使用该事件,可以防止空格键产生任何副作用

因此(猜测事件处理程序的外观)

希望这有帮助。如果没有,请提供更多详细信息。

使用
$(document.focus()将无效,因为
文档
不是一个可聚焦的元素,它实际上根本不是一个元素。尝试使用
document.activeElement
获取活动元素并
模糊它

document.activeElement.blur();
为此,您需要在模式关闭时侦听事件,
hidden.bs.modal
,因为引导会自动将焦点返回到关闭时的按钮

示例(): 或者,您可以将焦点设置为模型本身中的可聚焦元素(如果存在)。这可能会提供最愉快的用户体验。

使用
$(document.focus()将无效,因为
文档
不是一个可聚焦的元素,它实际上根本不是一个元素。尝试使用
document.activeElement
获取活动元素并
模糊它

document.activeElement.blur();
为此,您需要在模式关闭时侦听事件,
hidden.bs.modal
,因为引导会自动将焦点返回到关闭时的按钮

示例():
或者,您可以将焦点设置为模型本身中的可聚焦元素(如果存在)。这可能会给用户带来最愉快的体验。

这可能是由于默认关注某个可能导致这种情况的元素。已尝试事件。preventDefault()


这可能是由于默认关注某个可能导致此问题的元素。已尝试事件。preventDefault()


您可以通过以下方式避免按钮获得焦点:

$('#yourButtonId').focus(function(){
  $(this).blur();
});

我在您发布的JSFIDLE中尝试了这一点,效果很好,空格键不再打开模式。

您可以通过以下方式避免按钮获得焦点:

$('#yourButtonId').focus(function(){
  $(this).blur();
});

我在你发布的JSFIDLE中尝试了这一点,效果很好,空格键不再打开modal。

这里是JSFIDLE:当modal关闭时,按钮
启动演示模型
保持焦点。按下空格键时,模式再次弹出,我无法返回
false
,因为我已经在空格键上定义了一个处理程序。它暂停/恢复文档上的视频。虽然处理程序工作正常,但也会在空格键上加载一个模式。这里是JSFIDLE:当模式关闭时,按钮
启动演示模型
保持焦点。按下空格键时,模式再次弹出,我无法返回
false
,因为我已经在空格键上定义了一个处理程序。它暂停/恢复文档上的视频。虽然处理程序工作正常,但也会在空格键上加载一个模式,但没有帮助。这里是JSFIDLE:关闭modal后,按钮保持焦点。因此,当按下空格键时,modal再次加载!我不希望发生这种情况。我已经尝试过了,但是使用了
$(“#myModal”)
而不是
$(文档)
。你能解释一下区别吗?@SuhailGupta在引导程序将焦点返回到元素之前,元素本身上的事件回调会运行。将事件设置在树的更高位置可以避免此问题。没有帮助。这里是JSFIDLE:关闭modal后,按钮保持焦点。因此,当按下空格键时,modal再次加载!我不希望发生这种情况。我已经尝试过了,但是使用了
$(“#myModal”)
而不是
$(文档)
。你能解释一下区别吗?@SuhailGupta在引导程序将焦点返回到元素之前,元素本身上的事件回调会运行。将事件设置在树的较高位置可避免此问题。是。让这成为一个评论。是的。让这成为一个评论。
$('#yourButtonId').focus(function(){
  $(this).blur();
});