2011-02-28 65 views
2

我在我的後臺使用了一些內容編輯的花哨框。我最近添加了一個圖像管理器,我用javascript創建。這有點像一個fancybox,但我必須從scractch那裏做,因爲它能夠覆蓋第一個。 我的問題是這樣的: 我希望讓用戶能夠按退出鍵關閉我的經理,但如果我使用​​jquery fancy box

當我按下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

您可以下載的Fancybox軟件包還包含一個正常(未縮小)的版本。 – 2011-02-28 23:27:11

回答

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'](); 
     } 
    }); 

} 

基本上,你有你的貼心的功能請執行以下操作:

  • 取消綁定命名空間​​事件
  • 閉上你的窗口
  • 重新綁定命名空間​​事件的公開曝光$.fancybox.close();

個問題與此:

  • closeImageManager重新綁定​​事件,它不會檢查currentOpts.enableEscapeButtoncurrentOpts.enableKeyboardNav因爲這些選項似乎並沒有被公開曝光。
  • 它需要重複綁定​​事件的代碼(一次在fancybox.js中,一次在closeImageManager函數中)。
+0

謝謝,我會嘗試它今晚或明天 – 2011-03-01 17:53:25

+0

這真的很好,完美的工作,只是複製粘貼,它完成。我明白它是如何工作的。感謝細節。 – 2011-03-02 02:37:31

+0

優秀!很高興能工作,因爲我甚至沒有真正測試過它。 – 2011-03-02 05:10:14