2013-06-03 43 views
0

我想創建一個函數,在'onStart'選項加載fancybox時調用。 代碼將需要檢查頁面是否已加載超過7秒但尚未完成。如果fancybox在7秒內沒有完成加載,該功能將殺死Fancybox模式。下面是我目前的位置,但我已經太過分了,並且相信它不能完成。如果語句運行功能在Fancybox'onStart'document.ready之前

$.fancybox({ 
      'autoScale': false, 
      'centerOnScroll': false, 
      'enableEscapeButton': false, 
      'hideOnOverlayClick': false, 
      'href': "link Removed", 
      'showCloseButton': false, 
      'onStart': function() { 
       $.fancybox.showActivity(); 
       window.onload = function() { 
        var a = new Date();//get seconds of loading start 
       } 
       var b = new Date();//get seconds after loading started 
       var difference = (b - a)/1000; 

       if (document.readyState !== "complete" && difference >= 7) { 
        parent.$.fancybox.close(); 
       } 
      }, 
      'onComplete': function() { 
       $('#fancybox-frame').load(function() { // wait for frame to load and then gets it's height 
        $('#fancybox-content').height($(this).contents().find('body').height() + 30); 
       }); 
       $.fancybox.hideActivity(); 
      }, 
      'type': 'iframe' 

     }); 

回答

0

看起來像一個範圍問題..

window.onload = function() { 
    var a = new Date(); // Declared the variable inside the function 
} 

    var difference = (b - a)/1000; 
         ^------- Cannot access it outside the scope 

所以將只可在這方面

試試這個

var a; 

window.onload = function() { 
    a = new Date(); //get seconds of loading start 
} 

$(function() { 
    $.fancybox({ 
     'autoScale': false, 
      'centerOnScroll': false, 
      'enableEscapeButton': false, 
      'hideOnOverlayClick': false, 
      'href': "link Removed", 
      'showCloseButton': false, 
      'onStart': function() { 
      $.fancybox.showActivity(); 
      var b = new Date(); //get seconds after loading started 
      var difference = (b - a)/1000; 

      if (document.readyState !== "complete" && difference >= 7) { 
       parent.$.fancybox.close(); 
      } 
     }, 
      'onComplete': function() { 
      $('#fancybox-frame').load(function() { 
         // wait for frame to load and then gets it's height 
       $('#fancybox-content').height($(this).contents() 
             .find('body').height() + 30); 
      }); 
      $.fancybox.hideActivity(); 
     }, 
      'type': 'iframe' 
    }); 
+0

@Alan_N:也嘗試'父。 $ .fancybox.cancel()'而不是'parent。$。fancybox.close();' – JFK

+0

Sushanth,感謝您的更正。我會執行。我認爲它可能無法正常工作的唯一原因是,因爲我使用的是type:iframe,Fancybox認爲它在iframe啓動時完成加載,對嗎?正在加載的內容是必須填寫簡單表單的第三方來源。如果這種方式行不通,我認爲下一步是將代碼放在iframe內容的頭部。 JFK,感謝您的意見,我會做出改變。 –

+0

@Sushanth:這似乎是一個很好的方法,但我如何從iframe轉換到內聯。這也正在改變發佈到fancybox中的文件。被調用的文件將不再具有html/head/body標籤,因爲它現在被作爲內聯對象處理。 –