jquery easyui Tab 引入頁面的問題

2022-07-21 10:48:08 字數 3856 閱讀 8744

jquery easyui 的tabs外掛程式有兩種方式載入某個tab(標籤頁)上的內容:「href遠端請求」和「content本地內容」,本文就兩種方式的優缺點進行簡單分析和思考。

兩者特點:

href方式載入資料的特點:

被載入的頁面只有body元素內部的內容才會被載入,也就是jquery的ajax請求的只是html片段。

載入遠端url時有遮罩效果,也就是「等待中……」效果,使用者體驗較好。

當載入的頁面布局較為複雜,或者有較多的js指令碼需要執行的時候,編碼往往就需要謹慎了,容易出問題,後面會詳細談。

content方式載入資料的特點:

比較靈活,你可以在指令碼裡面拼寫html**,然後賦值給tab的content屬性,不過這種寫法會使得**易讀性變差。

可以把iframe賦給content,把乙個iframe嵌入也就沒有什麼不能完成的了。

使用iframe會造成客戶端js重複載入,浪費資源,比如說你主頁面要引用easyui的庫,你的iframe也要引用,浪費就產生了。

簡單總結:

根據上面的分析,使用content的方式較為簡潔,而且可以引入iframe來搞定一切,缺點也很明顯,系統較為複雜的話,將帶來極大地資源浪費,只適合較為簡單的頁面系統;

而href方式則對編碼能力要求的稍微高一些,因為html的片段,稍微不注意就會處理不好,不過熟練的話,個人覺得href方式是不二之選。

href常見問題:

1.href只載入目標url的html片段

這個特性是由jquery封裝的ajax請求處理機制所決定的,所以目標url頁面裡不需要有html,head,body等標籤,即使有這些元素,也會被忽略,所以放在head標籤裡面的任何指令碼也不會被引入或者執行。

2.短暫的頁面混亂:

href鏈結的頁面比較複雜的時候,easyui對其渲染往往需要乙個較長的過程,這時候,載入進來的html片段毫無布局可以,過一會自動會好,這時候easyui已經完成對它的渲染。如何避免這個混亂的過程呢,還得靠easyui的乙個基礎外掛程式——解析器(parser)。

parser有個oncomplete事件,這個事件就是指easyui對頁面完成渲染時觸發,這樣思路就很清晰了:用乙個div遮罩住讓被載入進來的html片段,在oncomplete事件中,讓這個div淡出,這時候渲染好的html片段就能美人出浴了,同時還整了個等待中的效果,一舉兩得。這樣要做兩件事:

第一是在要載入的html片段中放乙個遮罩用的div:

show source

view source

print

?1

<divid="loading"style="position: absolute; z-index: 1000; top: 0px; left: 0px; width: 100%; height: 100%; background: #dddddb; text-align: center; padding-top: 20%;">

show source

view source

print

?1

functionshow());

5

}

6

vardelaytime;

7

$.parser.oncomplete =function()

需要注意的是,如果多個tab頁面都使用了oncomplete事件,當前定義的會覆蓋之前定義的。其實每次easyui渲染完成均會呼叫oncomplete事件,所以每開啟乙個包含easyui控制項的tab頁,oncomplete事件就會被呼叫。

其實這個現象是跟第乙個現象的原因一樣的,easyui完成對html片段渲染需要一定的時間,頁面越複雜,耗時越長,這時候難以避免html存在的指令碼存在對easyui某些外掛程式的呼叫,比如datagrid等,這個時候就會報錯,解決方案同上,將這些指令碼放到oncomplete事件裡處理,也就保證了渲染完成前,不會被執行。

4.放在window裡面表單驗證的提示資訊會亂串:

這個現象應該是外掛程式自身的bug,對位置的計算沒有考慮到這些特殊的事情,解決方式可以投機取巧,在開啟window後,讓表單不符合驗證的input獲得焦點就可以了。

5.兩次或者多次載入遠端資料問題:

官方已經說明在1.2.5的版本中已經修正了這個bug,但是還是有不少人反應會出現兩次載入遠端資料的現象,甚至在1.2.6版本中也會遇到,如果您確實遇到這種情況了,請按以下方式檢查:

為什麼會這樣,看看原始碼便知道了:

$.fn.tabs =function(options, param)

6

//如果options不是字串,直接構造控制項,inxing渲染。

7

options = options || {};

8

returnthis.each(function()

15

else, $.fn.tabs.defaults, $.fn.tabs.parseoptions(this), options),

18

tabs: wraptabs(this),

19

selecthis:

20

});

21

}

22

buildbutton(this);

23

setproperties(this);

24

setsize(this);

25

initselecttab(this);

26

});

27

};

因此,直接傳入物件的話,所有控制項都會重新構造的,tabs多次載入的問題大多數就是這麼發生的。

jquery easyui Tab 引入頁面的問題

jquery easyui 的tabs外掛程式有兩種方式載入某個tab 標籤頁 上的內容 href遠端請求 和 content本地內容 本文就兩種方式的優缺點進行簡單分析和思考。兩者特點 href方式載入資料的特點 被載入的頁面只有body元素內部的內容才會被載入,也就是jquery的ajax請求的...

jquery easyui tab引入頁面的問題

jquery easyui 的tabs外掛程式有兩種方式載入某個tab 標籤頁 上的內容 href遠端請求 和 content本地內容 本文就兩種方式的優缺點進行簡單分析和思考。兩者特點 href方式載入資料的特點 被載入的頁面只有body元素內部的內容才會被載入,也就是jquery的ajax請求的...

關於springboot專案跳轉頁面的問題

springboot專案,如果想使用controller來實現跳轉頁面,除了引入依賴 dependency groupid org.springframework.boot groupid artifactid spring boot starter web artifactid dependenc...