2011-08-30 229 views
2

我regestering一個jQuery的fancybox像這樣:檢查jQuery「Fancybox」是否已經註冊?

 $(document).ready(function() { 

     $("#help").fancybox({ 
      'width': '90%', 
      'height': '90%', 
      'autoScale': true, 
      'transitionIn': 'elastic', 
      'transitionOut': 'none', 
      'titleShow': false, 
      'type': 'iframe' 
     }); 
     }); 

然而,在頁面傳送/回發是越來越多次註冊,減慢下來,以突破點。有沒有辦法檢查事件是否已經註冊,如果沒有,註冊?

僞代碼:

//check if fancybox has not been registered 
if($("help").fancybox == null)) 
{ 
    //register fancy box 
} 

回答

3

當運行的fancybox,它增加了一個fancybox進入jQuery的data對象。

可以測試它的存在:

if(! $("#help").data().fancybox) 
{ 
    //register fancy box 
} 
+1

Fancybox 2似乎並沒有這樣做。至少不是以我的經驗。 –

1

此功能查找您的#help元件並加載只有當它的存在fancybox.js。成功加載Fancybox.js後,它會調用成功函數並初始化你的fancybox。

這隻會影響具有元素#help的頁面。所以你保存了HTTP請求和帶寬。

請參見:http://api.jquery.com/jQuery.ajax/

你也應該尋找error function它允許你來處理錯誤。

$(document).ready(function() { 

    // Look for #help 
    if ($('#help').html() !== null) { 

     // Load, init and config the fancybox 
     $.ajax({ 
      url: '/js/path/to/fancybox.js', 
      type: 'GET', 
      dataType: 'script', 
      success: function() { 

       // Init Fancybox 
       $("#help").fancybox({ 
        'width': '90%', 
        'height': '90%', 
        'autoScale': true, 
        'transitionIn': 'elastic', 
        'transitionOut': 'none', 
        'titleShow': false, 
        'type': 'iframe' 
       }); 
      } 
     }); 

    } 
}); 
2

Fancybox使用$(element).data()來存儲其元素相關配置。你只需要檢查一個fancybox是否存在。

$("#fancy").data("fancybox"); 

查看此fiddle瞭解更多fnu。

0

有點晚,但對於2的fancybox我用:

parent.jQuery.fancybox.isOpen 

我認爲你也可以使用:

parent.jQuery.fancybox.isOpened

兩個語句都將返回如果屬實fancybox在網站上打開。