jquery花式盒子

时间:2011-02-28 23:20:27

标签: jquery jquery-plugins

我正在使用精美的盒子在我的后台进行一些内容编辑。我最近添加了一个用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']();
                    }
                });
            }...  

这有任何帮助吗?

1 个答案:

答案 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.enableEscapeButtoncurrentOpts.enableKeyboardNav,因为这些选项似乎没有公开曝光。
  • 需要重复绑定keydown事件的代码(一次在fancybox.js中,一次在closeImageManager函数中)。