1. 程式人生 > >EasyUI之動態修改或新增textbox等表單元件

EasyUI之動態修改或新增textbox等表單元件

在某個input標籤上新增

class="easyui-datebox"

它就能自動變成日曆,這其實是EasyUI掃描的結果,在網頁載入完成後,相當於在$(document).ready()事件中,對整個網頁進行了一次掃描,發現某個input標籤含有class=”easyui-datebox”屬性,就做上邊講到那些處理,不僅僅是EasyUI如此,幾乎所有的UI都是這個原理。

因此,如果我們用什麼append、appendTo方法動態在頁面中插入一段html程式碼,或者用什麼addClass方法給input標籤動態新增一個class屬性,這些操作EasyUI是不知道的,所以新插入的這些東東,即使有class=”easyui-datebox”屬性,但沒有任何效果。

如何通知EasyUI呢?通過查詢資料,發現網上比較流行的一種方法是用:

$.parser.parse()

把它放在插入html的語句之後,重新渲染介面,果然很管用,新加入的元素能被識別。

但是,很快就發現一個問題,由於使用了$.parser.parse()對整個頁面重新渲染,這會影響到以前已經渲染過的元件。

舉個例子:頁面原本有一個使用了datebox元件的input標籤,使用者通過datebox元件選擇了時間,然後使用者又新增了一個使用datebox元件的input標籤(這時候程式會重新渲染頁面),奇怪的事情發生了:原來的input標籤明明已經選過時間,顯示的也正常,但卻拿不到值!

 原因正是出在$.parser.parse()上,由於它對整個頁面進行渲染,以前正常的元件也被渲染了,相當於所有的元件進行了一次“初始化”,最終導致值丟失。

再仔細問問度娘,發現$.parser.parse()是可以帶引數的,引數意思差不多就是傳入一個區域性的DOM物件,只對區域性進行渲染,避免影響其他元件。舉個巧妙的應用例子:

var targetObj = $("<input name='mydate' class='easyui-datebox'>").appendTo("#id");

$.parser.parse(targetObj);

我們常常會通過appendTo方法把使用了datebox元件的input標籤插入到某個DOM中,別忘了appendTo方法是有返回值的,返回的恰恰就是剛剛插入的物件。我們拿到這個物件,單獨對它進行渲染,這樣既可以實現動態渲染,又能避免影響其它元件。

因此,在讀者的專案中,最好使用區域性渲染(無論用何種方法得到目標物件),避免使用全域性渲染。