首頁 >web前端 >js教程 >layer關閉彈出層刷新父介面功能實作方法

layer關閉彈出層刷新父介面功能實作方法

小云云
小云云原創
2018-01-18 16:34:201950瀏覽

本文主要介紹了layer實現關閉彈出層刷新父界面功能,結合實例形式分析了使用layui的layer在關閉彈出層時刷新父界面的常用實現技巧與相關操作注意事項,需要的朋友可以參考下,希望能幫助大家。

本文實例講述了layer實作關閉彈出層刷新父介面功能。分享給大家供大家參考,具體如下:

layer是一款近年來備受青睞的web彈層組件,她具備全方位的解決方案,致力於服務各水平段的開發人員,您的頁面會輕鬆地擁有豐富友善的操作體驗。

最近一個專案採用的是hui前端框架,他的彈出層就是用的layer插件,對於彈出層,有一個操作體驗大家都知道,就是關閉彈出層,需要刷新父親頁面。開始寫的時候,我陷入了自己的誤解,在彈出層處理成功之後,我調用的是:


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

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

方案一:

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


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

方案二:

#呼叫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();
      }
});

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


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

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

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

對於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的彈出就好了。

相關推薦:

layui框架中layer父子頁面互動詳解

layui中layer前端元件實作圖片顯示功能

jQuery、layer實作彈出層的開啟、關閉功能實例詳解

以上是layer關閉彈出層刷新父介面功能實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn