2010-07-17 137 views
13

我想在關閉Fancy Box彈出框時刷新父頁。我在彈出窗口中有一個登錄頁面,所以我需要刷新父頁面以在Fancy Box關閉時顯示新的登錄狀態。Fancy Box - 關閉iframe彈出窗口時如何刷新父頁面?


我可以得到它沒有的IFRAME代碼工作:

<script type="text/javascript"> 
$(document).ready(function() { 
    $("a.iframeFancybox1").fancybox({ 
    'width': 800, 
    'height': 450, 
    'onClosed': function() { 
    parent.location.reload(true); 
    ;} 
    }); 
}); 
</script> 

但我不能讓它使用iframe代碼工作:

<script type="text/javascript"> 
$(document).ready(function() { 
    $('a.iframeFancybox1').fancybox({ 
    'width': 800, 
    'height': 450, 
    'type' : 'iframe' 
    'onClosed': function() { 
    parent.location.reload(true); 
    ;} 
    }); 
}); 
</script> 

問題是這樣做的:

'type' : 'iframe'
 

只要我添加該行,彈出窗口停止工作。

任何人都可以提出一個解決方案,我怎樣才能得到一個iframe彈出花式框,並仍然得到父頁刷新時,框關閉? 謝謝!

+1

你只是缺少「IFRAME」後一個逗號? – user11977 2010-07-17 02:01:51

+0

謝謝smerriman!是。我錯過了一個逗號。接得好。 我修正了這個問題,但我仍然無法得到這個關閉重新加載頁面。 還有什麼想法? – dave 2010-07-17 04:59:30

回答

2

對我來說,下面的代碼工作正常:

$("a.ic-edit").fancybox({ 
      'width'  : '65%', 
      'height' : '85%', 
      'autoScale'  : false, 
      'titleShow' : false, 
      'transitionIn' : 'no', 
      'transitionOut' : 'no', 
      'scrolling'  : 'no', 
      'type'   : 'iframe', 
      onCleanup : function() { 
       return window.location.reload(); 
      } 
     }); 

我不能說完全是,但也許在使用「onCleanup」的原因(其實我沒有嘗試使用onClosed)。

10
$(".fancybox").fancybox({ 
      'width'    : '75%', 
      'height'   : '65%', 
      'autoScale'   : false, 
      'transitionIn'  : 'none', 
      'transitionOut'  : 'none', 
      'type'    : 'iframe', 
      'hideOnOverlayClick': false, 
      'onClosed'   : function() { 
            parent.location.reload(true); 
            } 
     }); 
0

當在'location.reload'中使用示例時,會得到一個瀏覽器彈出窗口,讓您知道它需要重新加載頁面。我點擊了一個按鈕來刷新頁面,並沒有警告彈出窗口。

$(".addDoc").colorbox({ 
    iframe: true, 
    width: "550px", 
    height: "230px", 
    'onClosed': function() { 
     $("#btnContSave").click(); 
    } 
}); 
+0

OP正在使用fancybox ...而不是colorbox,所以你的例子中的選項將無法與fancybox – JFK 2012-03-16 20:04:58

+0

嘖嘖謝謝...你甚至在否定之前嘗試過嗎? – Greg 2012-03-19 14:41:41

+0

你有沒有試過fancybox? ;) – JFK 2012-03-19 18:48:15

28
$(".fancybox").fancybox({ 
    type: 'iframe', 
    afterClose: function() { // USE THIS IT IS YOUR ANSWER THE KEY WORD IS "afterClose" 
     parent.location.reload(true); 
    } 
}); 

或者:

轉到您的jquery.fancybox.js文件和走線是這個樣子,並添加parent.location.reload(true);

afterClose: function (opts) { 
    if (this.overlay) { 
     this.overlay.fadeOut(opts.speedOut || 0, function() { 
      $(this).remove(); 
      parent.location.reload(true); 
     }); 
    } 
    this.overlay = null; 
} 
+0

+1「有一個不錯的項目」..嘿嘿。 – Spudley 2012-07-17 21:51:56

+3

用這種方法,你正在改變所有Fancybox的行爲,這在大多數情況下可能不適用。 – Raptor 2012-10-10 10:36:18

+0

+1這適用於我的問題 – Seeker 2013-03-14 13:51:53

1
'onClosed': function() { 
parent.location.reload(true); 
;} // <----is it ok if you have an extra ';' here? 
+0

不會。這會給出一個js錯誤。 – Greg 2013-05-10 17:44:02

1

圍繞着t的工作Ø避免POSTDATA警告當你關閉的iFrame

1)請創建形式:

花式版本爲2.xx:

<form name="RefreshForm" method="post" action="" > 
<input name="Name1" value="Value1" type="hidden" /> 
<input name="DatafromPost1" value="ValuefromPOST1" type="hidden" /> 
<input name="DatafromPost2" value="ValuefromPOST2" type="hidden" /> 
</form> 

2)在你的想象盒的末尾添加此行

afterClose : function() { 
setTimeout('document.RefreshForm.submit()',1000); } 

花式版本1.3.x的

 onClosed : function() { 
setTimeout('document.RefreshForm.submit()',1000); } 

1000 = 1秒。

1

鏈接刷新:

jQuery(function($){ 
    $('#refresh').click(function() 
     {  
      parent.location.reload(); 
    }); 
}); 

<a href="#" id="refresh">refresh</a> 

你能給:

setTimeout(function() { 
      parent.location.reload(); 
     }, 1000); 

或條件,例如,

<script> 
if(formSend == true){ 
setTimeout(function() { 
       parent.location.reload(); 
      }, 1000); 
} 
</script> 
-1

'onClosed':函數(){parent.location。重新加載(真); }

1

你只需要寫兩行關閉fancybox,並在關閉後重新加載打開你的fancybox的父頁面。

有一兩件事要聲明的是,如果你將與window.opener它不會作爲的fancybox工作不被視爲父的子窗口,當談到window.opener嘗試

還有一事情是,window.opener不會用於Windows Phone和IE,因爲IE已經很愚蠢。

<script type="text/javascript"> 
parent.$.fancybox.close(); 
     parent.location.reload(true); 
</script> 
1

除了明顯的缺失,你說你已經修復了IMO這不是一個fancybox問題,而是一個父刷新問題。

我發現獲得一個框架的父母來重新加載是一個挑戰,因爲有多種方法可以「理論上」實現這一點,但「大多數」只是不實際工作,更糟糕的是,實際上並沒有似乎是我測試過的網頁瀏覽器引發的任何錯誤。

這裏是代碼在Chrome,FF,IE瀏覽器對我的作品還有:

afterClose: function(){ 
    parent.location.href = parent.location.href; 
}, 

這基本上是說設置父HREF到不管它目前是在一個頁面刷新的效果的結果。試試看,它應該工作得很好。

事實上行:

parent.location.href = parent.location.href; 

可以與幀被使用(當然從母體)或無幀簡單地刷新網頁。 HTH。

0

刷新或重新加載關閉在Shopify

我就是用這個Shopify上使用的fancybox的形式,但這個將在其他也

jQuery(".add-device").fancybox({ 
    maxWidth : 970, 
    maxHeight : 700, 
    fitToView : false, 
    width  : '90%', 
    height : '90%', 
    autoSize : false, 
    closeClick : false, 
    openEffect : 'none', 
    closeEffect : 'none', 
    beforeClose: function() { 
     device_has_subs = false; 
     $("#mac_address").prop("readonly", false); 
    }, 
    afterClose : function() { 
     window.location.reload(true); 
     } 
    }); 

只在這裏工作afterClose正在玩任務 我們還可以寫父母而不是窗口

afterClose : function() { 
    parent.location.reload(true); 
    } 

如果僅重置shopify形式然後,在某個時候shopify $( 「表」)[0]。復位()不工作這麼使用迭代,我們可以清空表格值

jQuery(".add-device").fancybox({ 
    maxWidth : 970, 
    maxHeight : 700, 
    fitToView : false, 
    width  : '90%', 
    height : '90%', 
    autoSize : false, 
    closeClick : false, 
    openEffect : 'none', 
    closeEffect : 'none', 
    beforeClose: function() { 
     device_has_subs = false; 
     $("#mac_address").prop("readonly", false); 

     var array_element = document.getElementById("form_id"); 
     if (array_element){ 

     for (i=0; i < array_element.length; i++){ 
      element = array_element[i].type.toLowerCase(); 
      switch(element){ 
       case "text": 
        array_element[i].value = ""; 
        break; 
       case "hidden": 
        array_element[i].value = ""; 
        break; 
       case "email": 
        array_element[i].value = ""; 
        break; 
       case "checkbox": 
        if(array_element[i].checked){ 
        array_element[i].checked = false; 
        } 
        break; 
       case "select-one": 
        array_element[i].selectedIndex = -1; 
        break; 
       case "select-multi": 
        array_element[i].selectedIndex = -1; 
        break; 
       default: 
        break; 
      } 

     } 

     } 

    }, 
    }); 

form_id的形式ID