我计划在空格键上点击一个动作。它确实发生了。
// when space bar is pressed
do-something; // Applied on the $(document).keypress..
但是,当我按下空格键,以及必须触发的事件/动作时,模态加载/再次显示。为什么会这样?我试图阻止模态再次加载:
$('#goal').on('hidden.bs.modal',function() {
$(document).focus(); // Get the button that triggered modal
// out of focus
});
但是文档没有得到关注,触发模态加载的按钮仍然保持清晰,直到我点击屏幕使文档重新聚焦。如何防止模态在空格键上再次加载?
我还尝试了触发模态的按钮上的blur()
功能。但它没有帮助吗?
答案 0 :(得分:3)
使用$(document).focus();
将无效,因为document
不是可聚焦元素,它实际上根本不是元素。尝试使用document.activeElement
获取活动元素和blur
。
document.activeElement.blur();
要做到这一点,你需要在关闭模态hidden.bs.modal
时监听事件,因为Bootstrap会自动将焦点返回到关闭时的按钮。
$(document).on('hidden.bs.modal', function() {
document.activeElement.blur();
});
或者,您可以将焦点设置为模型本身中的可聚焦元素(如果存在)。这可能会带来最愉快的用户体验。
答案 1 :(得分:1)
这可能是由于默认关注可能导致此问题的元素。尝试了event.preventDefault(); ?
// when space bar is pressed
event.preventDefault();
do-something; // Applied on the $(document).keypress..
答案 2 :(得分:0)
如果没有看到更多的代码,或者更好的是一个可以证明你的问题的jsfiddle,这有点难以回答。
但一般情况下,您可以通过从jquery事件处理函数返回false
来指示您已经消耗了该事件,从而防止空格键按键产生任何副作用。
所以(猜测你的事件处理程序是什么样的)
$('...').keypress( function(event) {
if ( event.which == 32 ) {
doSomething();
return false;
}
});
希望这会有所帮助。如果没有,请提供更多详细信息。
答案 3 :(得分:0)
您可以通过这种方式避免按钮获得焦点:
$('#yourButtonId').focus(function(){
$(this).blur();
});
我在你发布的jsFiddle中尝试了这个并且它有效,空格键不再打开模态。