layer關閉重新整理父介面

武文博KevinLM發表於2017-07-09

layer是一款近年來備受青睞的web彈層元件,她具備全方位的解決方案,致力於服務各水平段的開發人員,您的頁面會輕鬆地擁有豐富友好的操作體驗。 
最近一個專案採用的是hui前端框架,他的彈出層就是用的layer外掛,對於彈出層,有一個操作體驗大家都知道,就是關閉彈出層,需要重新整理父頁面。開始寫的時候,我陷入了自己的誤區,在彈出層處理成功之後,我呼叫的是:

var index = parent.layer.getFrameIndex(window.name);
parent.location.href=url;
parent.layer.close(index);
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

這個地方是這樣寫也沒錯,但是如果這麼寫,它就只能被一個地方呼叫了,如果有多個地方呼叫的話,它不能返回原地址,而是重定向到新的url地址上去了。而剛好,在我的專案中間,某一個彈出層被兩個地方呼叫了,所以很明顯這種方案就不合適了,需要優化。百度了一下,找到如下兩種優化方案: 
方案一: 
在layer彈出層中呼叫父介面重新載入函式

window.parent.location.reload();
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

方案二: 
呼叫layer外掛的end回撥方法: 
end - 層銷燬後觸發的回撥 
型別:Function,預設:null 
無論是確認還是取消,只要層被銷燬了,end都會執行,不攜帶任何引數。

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

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();
            }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
  • 1
  • 2
  • 1
  • 2

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

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

轉自:http://blog.csdn.net/tanzhen1991910/article/details/53448981

----------------------------------------------------------------------------------------

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

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

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

        var index = parent.layer.getFrameIndex(window.name); //獲取視窗索引
        parent.layer.close(index);  // 關閉layer
 
      採用ajax這樣可以,但是我做的是支付,要彈出頁面才能支付,不能轉換為ajax,怎麼幫?後面我老大說:“你就不能晚點執行關閉嗎”?這是一個想法試了一下就好了。
      附上程式碼:
        $("#myForm").submit();
        var index = parent.layer.getFrameIndex(window.name); //獲取視窗索引
        setTimeout(function () {
            parent.layer.close(index);  // 關閉layer
        },500);
        
        我還需要在關閉父類視窗後再開啟一個視窗,則怎麼解決,後面發現layer.js留有一個好的方式,那就是呼叫父視窗的方法,這個不受子視窗的影響,通過:parent.父類方法名(引數)這樣就可以了,在父視窗中再呼叫layer.js的彈出就好了。

相關文章