1. 程式人生 > >layer彈出層關閉後重新載入父介面

layer彈出層關閉後重新載入父介面

方案一:

在layer彈出層中呼叫父介面重新載入函式

?

1

2

3

window.parent.location.reload();

var index = parent.layer.getFrameIndex(window.name);

parent.layer.close(index);

方案二:

呼叫layer外掛的end回撥方法:

end - 層銷燬後觸發的回撥

型別:Function,預設:null

無論是確認還是取消,只要層被銷燬了,end都會執行,不攜帶任何引數。

父視窗開啟layer彈出框時,新增end回撥

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function openLayer() {

  //iframe層

    parent.layer.open({

      type: 2,

      title: '修改',

      shadeClose: false, //點選遮罩關閉

      shade: 0.8,

      area: ['30%', '45%'],

      maxmin: true,

      closeBtn: 1,

      content: [url, 'yes'], //iframe的url,yes是否有滾動條

      

end: function () {

        location.reload();

      }

});

layer彈出框處理完成之後,就不需要呼叫其他重新整理操作函數了,直接關閉就行了

?

1

2

var index = parent.layer.getFrameIndex(window.name);

parent.layer.close(index);

相比較而言,第一種方案會更佳,因為在操作邏輯上,手動關閉彈出框,應該不觸發重新整理操作,只有當彈出框的處理邏輯執行成功後,呼叫函式關閉彈出框才觸發父介面重新整理操作,基於這個邏輯,應該選擇方案一。方案二,不管怎樣都會重新整理頁面,實際上無端的增加了伺服器的處理壓力。

方案二:可以解決子頁面處理後的結果傳送給子頁面的父頁面的問題。

對於layer.js出現回撥關閉父類的彈出層時,之前的表單的submit失效的問題:

如何解決:網上有很多,有的是轉為ajax的請求,在資料傳輸完再關閉父類的彈出層:

下面是關閉父彈出層的辦法:

?

1

2

var index = parent.layer.getFrameIndex(window.name); //獲取視窗索引

parent.layer.close(index); // 關閉layer

採用ajax這樣可以,但是我做的是支付,要彈出頁面才能支付,不能轉換為ajax,怎麼幫?後面我老大說:“你就不能晚點執行關閉嗎”?這是一個想法試了一下就好了。

附上程式碼:

?

1

2

3

4

5

$("#myForm").submit();

var index = parent.layer.getFrameIndex(window.name); //獲取視窗索引

setTimeout(function () {

  parent.layer.close(index); // 關閉layer

},500);

我還需要在關閉父類視窗後再開啟一個視窗,則怎麼解決,後面發現layer.js留有一個好的方式,那就是呼叫父視窗的方法,這個不受子視窗的影響,通過:parent.父類方法名(引數)這樣就可以了,在父視窗中再呼叫layer.js的彈出就好了。