我正在使用精美的盒子在我的后台进行一些内容编辑。我最近添加了一个用javascript创建的图像管理器。它有点像fancybox,但我不得不从scractch做到它能够覆盖第一个。
我的问题是:
我希望用户可以按退出键关闭我的经理,但如果我使用$(window).keypress
当我按esc键时,两个方框都关闭。
当我开始加载我的盒子时,我已经尝试$(window).unbind('keypress')
,并且我试图查看fancybox js文件,但它被最小化。
有没有人知道我如何禁用,然后在fancybox上启用转义键(在运行时)?
感谢名单
好吧,我试过e.preventDefault(),我忘记了,但仍然没有。我查看了解压缩的js文件,我得到了这个:
_set_navigation = function() {
if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) {
$(document).bind('keydown.fb', function(e) {
if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
e.preventDefault();
$.fancybox.close();
} else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
e.preventDefault();
$.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
}
});
}...
这有任何帮助吗?
答案 0 :(得分:1)
所以这有效,但绝对是黑客攻击。
function closeImageManager(){
$(document).unbind('keydown.fb');
// Insert code to close your image manager
$(document).bind('keydown.fb', function(e) {
if (e.keyCode == 27) {
e.preventDefault();
$.fancybox.close();
} else if ((e.keyCode == 37 || e.keyCode == 39) && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
e.preventDefault();
$.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
}
});
}
基本上你有你的近距离功能:
keydown
事件keydown
事件重新绑定到公开的$.fancybox.close();
问题:
closeImageManager
重新绑定keydown
事件时,它不会检查currentOpts.enableEscapeButton
或currentOpts.enableKeyboardNav
,因为这些选项似乎没有公开曝光。keydown
事件的代码(一次在fancybox.js中,一次在closeImageManager
函数中)。