出現這個問題基本上都是$.fn.zTree對象undefined,沒有加載jquery
看網上的說法不少都是父頁面與子頁面,jQuery與zTree相關js的位置問題,可是我這邊是單頁面,因此不是這種緣由,繼續尋找。。。ajax
由於這裏是使用了require.js延遲加載,以前寫法以下(只保留了關鍵代碼):ui
require.config({ urlArgs: "date=" + _Config_.date.getDate(), paths: _PATH_, shim: { "easyui-core": { deps: ["jquery"], exports: "easyui-core" }, "easyui": { deps: ["easyui-core"], exports: "easyui" }, "ztree-core":{ exports:"_" }, "ztree-exedit":{ exports:"_" }, "ajaxFileupload":{ deps: ["jquery"], exports:"ajaxFileupload" } } }); require(['easyui',"ajaxFileupload","ZeroClipboard","ztree-core","ztree-exedit"], function(ZeroClipboard { var setting = {}; function loadTree(data) { var treeObj = $("#menuTree"); $.fn.zTree.init(treeObj, setting, data); } }
有懷疑是由於延遲加載,致使zTree相關js未加載致使錯誤,所以使用setTimeout,等待數秒後執行loadTree(),然而並無效果;url
一直尋找答案,在http://blog.csdn.net/u013026207/article/details/52105966這篇博文裏提到jquery與zTree版本衝突,可是我這裏是不存在版本衝突的,可是想到zTree是依賴jQuery的,可是require.config裏面並無,遂加上這段代碼spa
require.config({ urlArgs: "date=" + _Config_.date.getDate(), paths: _PATH_, shim: { ... "ztree-core":{ deps: ["jquery"], //此處必須依賴jquery,不加的話$.fn.zTree對象常常沒法加載 exports:"_" }, "ztree-exedit":{ deps: ["jquery"], exports:"_" }, ... } });
ok!再也不報錯.net
總結:出現這個問題仍是由於使用了require.js延遲加載zTree相關js,但沒有指定依賴,因此這個問題不必定很具備表明性,由於是接手的代碼,也不知道開發者爲何這麼寫;這邊先記錄下來,之後用到require.js的時候記得不要再犯一樣的錯誤code