1. 程式人生 > >關於layui 兩層彈框 ,關閉一個後,重新整理上一個彈框的某個下拉框問題

關於layui 兩層彈框 ,關閉一個後,重新整理上一個彈框的某個下拉框問題

(我使用的layui版本為2.4.3)

最近因為專案需要,需要實現一層彈框(下面稱之為A彈框)後,點選按鈕跳出二層彈框(下面稱中國之為B彈框),可以實現新增新的下拉框值,然後再關閉B彈框是,可以實現區域性重新整理A彈框中的部分塊,使得剛新增的值顯示,但是不能是整個頁面重新整理。

需求丟擲來,接下來說說我自己的實現過程,以及走過的坑吧。 首先把彈框部分程式碼實現,如下:

 //監聽提交
 layui.(['form','layer'],function(){
	 var form = layui.form;
	 var layer = layui.layer;
    form.on('submit(addSubmit)', function (data) {
        	//跳轉頁url
        	var url=$(this).attr("data-url");
        	//下拉框更新訪問的url
        	var selectUrl = $(this).attr("select_url");
        	//需要更新的div id
           // var top_divid = $(this).attr("top_divid");
        	//下拉框塊的lay-filter值
        	var select_div = $(this).attr("select_div");
        	//下拉框id
        	var select_id =  $(this).attr("select_id");
        	layer.open({
            	type: 2,
            	title: '詳情',
            	shadeClose: false,
            	shade: [0.3, '#000'],
            	maxmin: true, //開啟最大化最小化按鈕
            	area: ['900px', '500px'],
            	content: url,
         	   end:function(){ 
            
            	}
        	})
    	});
    });
    (留意程式碼中的end 函式,後續所有內容實現都是寫在這裡)

所有的東西都是從無到有的,所以一開始我能想到的是也是重新整理整個頁面,這個很容易實現: 直接在end函式中新增:location.reload(); 這樣就可以實現重新整理整個頁面。

然後發現重新整理彈框整個頁面,這樣一點都不友好,例如在某些輸入框已經填入了內容,可是在重新整理整個彈框頁面後就會把所用輸入框,下拉框初始化。所以重新整理整個頁面很不友好,必須實現重新整理某個下拉框或者某個塊才行。接下來就是自己把自己坑的時候了。

有個區域性重新整理的概念以後,我首先想到的是一個div重新整理,然後就開始找資料,找方法實現。 以下就是我的實現過程(縱然這個實現方法不是我最終的實現方案,可是也有學習借鑑的部分,僅供大家參考學習) 同樣以下程式碼也是放在上述end函式裡面(end函式有什麼用,自己看layui文件瞭解,這裡就不一一細說了),程式碼如下:

//重新整理指定區域
  $("#"+top_divid).load(location.href +" #"+top_divid); //注意第二個#號前面必須要有一個空格,不然重新整理會有重疊
  //重新載入下拉框(資料來源資料庫)(該方法不是講述重點,所以不寫出來了)
  addOptions(selectUrl,select_id,select_div,form);

通過以上的方法,一開始還是內心歡喜的,畢竟覺得自己已經實現了自己想要實現的功能。可是一測試就腦瓜疼了。在進行開啟B彈框然後再關閉B彈框後,A彈框頁的對應下拉框莫名其妙就載入不出來,不過偶爾又可以加載出來。找了半天沒有找到緣由是真的難受。後來發現,有可能是過載整個塊帶來的問題。畢竟下拉框是動態載入的。無奈之下,只能再去換其他方法。

研究了一下,然後就有一個新的思路,既然下拉框資料是載入而來的,那麼是否可以將其對應的選項卡內容移除在重新載入。抱著試一試的心態,最後還真的成功了,一下就是我的實現程式碼:

				//根據id移除選項卡所有選項
                document.getElementById(select_id).options.length = 0;
                //新增第一個選項。
                $('#'+select_id).append("<option value=''>請選擇</option>");
                //更新表單
                 form.render('select',select_div);
                addOptions(selectUrl,select_id,select_div,form);
                (新增的第一個選項可以解除安裝addOptions函式裡面)

該方法是基於layui前端框架實現的,本人使用的是layui2.4.3版本。

至此,便完成了關閉B彈框頁重新整理A彈框頁指定部分模組。

如有哪裡不正確,望各位多多指教,當然有哪裡不懂的也可以聯絡我。不過建議多看文件,很有用。