想要實現從本地中載入json檔案,通過事件來動態插入到ul中時,遇到了一小bug
html中代碼是這樣的
<ul class="easyui-tree" id="tt"></ul>
js中的代碼
$(".next-menu:nth-child(1) a").click(function() {var $IDstr = $(this).attr("id"),$treeIDNum = parseInt($(this).attr("treeID")),jsonURL = "json/" + $IDstr + ".json",node;addAttr2Tree(jsonURL);changeImgSrc($treeIDNum); });});function changeImgSrc(nodeID){var node = $("#tt").tree('find', nodeID);if(node){$("#tt").tree('select', node.target);}if (node.attributes) {$("#img-box").attr("src", node.attributes.url);}}function addAttr2Tree(URL){$("#tt").tree({url: URL,method: "get",animate: true,lines: true});}
起初是想通過一個按鈕的點擊事件來動態載入tree的內容就是如上代碼,addAttr2Tree 是用來將點擊按鈕時對應的本地json資料加到html中的ul標籤中, changeImgSrc 是對tree節點的一些選中操作以及圖片的載入,但是無論怎麼調試,總是會出現一條錯誤
無法擷取attributes屬性!!!我反覆確認attributes是完整無缺的放在json檔案裡的而且總是第一次點擊按鈕時才會出現這種錯誤,第二次及其以後,這種錯誤是沒有的
後來我就想到,是不是因為json資料動態載入的速度比不上程式碼執行的速度?!
果然不出我所料!easyui中tree內建了一個方法onLoadSuccess 當資料成功載入時,才會執行一些操作
所以
$(".next-menu:nth-child(1) a").click(function() {var $IDstr = $(this).attr("id"),$treeIDNum = parseInt($(this).attr("treeID")),jsonURL = "json/" + $IDstr + ".json",node;addAttr2Tree(jsonURL);$("#tt").tree({onLoadSuccess: function(){changeImgSrc($treeIDNum);}});});
代碼改成這樣就可以了。
以上所述是小編給大家介紹的jQuery Easyui非同步載入tree的問題解析,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!