最近在用那个dtree做个树形菜单采用的jquery+ajax+dtree+struts2的结构,下面是我的做法:
大部分地方比较顺利,先分享一下我的做法,再提个问题。
利用struts2中json的插件,返回菜单表的json数据,再利用dtree将菜单表展现出来:
下面是ajax及构造dtree的js文件,因为dtree中的图片是路径是默认的所以我改成下面的这种
function dTree(objName,sImgPath) { this.config = { target : null, folderLinks : true, useSelection : true, useCookies : true, useLines : true, useIcons : true, useStatusText : false, closeSameLevel : false, inOrder : false } this.icon = { root : sImgPath+'base.gif', folder : sImgPath+'folder.gif', folderOpen : sImgPath+'folderopen.gif', node : sImgPath+'page.gif', empty : sImgPath+'empty.gif', line : sImgPath+'line.gif', join : sImgPath+'join.gif', joinBottom : sImgPath+'joinbottom.gif', plus : sImgPath+'plus.gif', plusBottom : sImgPath+'plusbottom.gif', minus : sImgPath+'minus.gif', minusBottom : sImgPath+'minusbottom.gif', nlPlus : sImgPath+'nolines_plus.gif', nlMinus : sImgPath+'nolines_minus.gif' }; this.obj = objName; this.aNodes = []; this.aIndent = []; this.root = new Node(-1); this.selectedNode = null; this.selectedFound = false; this.completed = false;};
这样在new时就可以把图片的路径加进去,这也是根据网上的个朋友的做法改写的,我的jquery的代码是单独放到一个文件中去的。如下所示
$(document).ready(function(){
var wscmtree = new dTree("tree","main/pic/");
var url = "createmenu.action";
var m_username=encodeURIComponent("");
var params = {username:m_username};
jQuery.post(url, params, callbackFun, "json");
function callbackFun(data)
{
var list = data.list;
for(var i=0;i<list.length;i++)
{
var menuid = list[i].menuid;
var parentid = list[i].parentid;
var menuname = "";
if (list[i].menuname==null)
{menuname=""}else{menuname = trim(list[i].menuname)}
var url = "";
if (list[i].url==null)
{url=""}else{url = trim(list[i].url)}
var title = "";
var target = "";
var icon = "";
var iconopen = "";
var open = false;
wscmtree.add(menuid, parentid, menuname,url,title,target,icon,iconopen,open);
}
$("body").append(wscmtree.toString());
$("#test").attr("value",wscmtree.toString());
}
$("#openall").click(function(){
wscmtree.openAll();
}
);
$("#closeall").click(function(){
wscmtree.closeAll();
}
); function trim(str)
{
return str.replace(/^\s+/, ' ').replace(/\s+$/, ' ');
}
})
现在的问题是我的树形菜单可以完全展示出来没有问题了,点击那个openall与closeall按钮时正常。现在有一个问题,我点击那个+或-号时不会出现任何反应是什么问题?页面左下角提示那个javascript是错误的。javascript:tree.0(1),括号中的数字是结点的ID
大部分地方比较顺利,先分享一下我的做法,再提个问题。
利用struts2中json的插件,返回菜单表的json数据,再利用dtree将菜单表展现出来:
下面是ajax及构造dtree的js文件,因为dtree中的图片是路径是默认的所以我改成下面的这种
function dTree(objName,sImgPath) { this.config = { target : null, folderLinks : true, useSelection : true, useCookies : true, useLines : true, useIcons : true, useStatusText : false, closeSameLevel : false, inOrder : false } this.icon = { root : sImgPath+'base.gif', folder : sImgPath+'folder.gif', folderOpen : sImgPath+'folderopen.gif', node : sImgPath+'page.gif', empty : sImgPath+'empty.gif', line : sImgPath+'line.gif', join : sImgPath+'join.gif', joinBottom : sImgPath+'joinbottom.gif', plus : sImgPath+'plus.gif', plusBottom : sImgPath+'plusbottom.gif', minus : sImgPath+'minus.gif', minusBottom : sImgPath+'minusbottom.gif', nlPlus : sImgPath+'nolines_plus.gif', nlMinus : sImgPath+'nolines_minus.gif' }; this.obj = objName; this.aNodes = []; this.aIndent = []; this.root = new Node(-1); this.selectedNode = null; this.selectedFound = false; this.completed = false;};
这样在new时就可以把图片的路径加进去,这也是根据网上的个朋友的做法改写的,我的jquery的代码是单独放到一个文件中去的。如下所示
$(document).ready(function(){
var wscmtree = new dTree("tree","main/pic/");
var url = "createmenu.action";
var m_username=encodeURIComponent("");
var params = {username:m_username};
jQuery.post(url, params, callbackFun, "json");
function callbackFun(data)
{
var list = data.list;
for(var i=0;i<list.length;i++)
{
var menuid = list[i].menuid;
var parentid = list[i].parentid;
var menuname = "";
if (list[i].menuname==null)
{menuname=""}else{menuname = trim(list[i].menuname)}
var url = "";
if (list[i].url==null)
{url=""}else{url = trim(list[i].url)}
var title = "";
var target = "";
var icon = "";
var iconopen = "";
var open = false;
wscmtree.add(menuid, parentid, menuname,url,title,target,icon,iconopen,open);
}
$("body").append(wscmtree.toString());
$("#test").attr("value",wscmtree.toString());
}
$("#openall").click(function(){
wscmtree.openAll();
}
);
$("#closeall").click(function(){
wscmtree.closeAll();
}
); function trim(str)
{
return str.replace(/^\s+/, ' ').replace(/\s+$/, ' ');
}
})
现在的问题是我的树形菜单可以完全展示出来没有问题了,点击那个openall与closeall按钮时正常。现在有一个问题,我点击那个+或-号时不会出现任何反应是什么问题?页面左下角提示那个javascript是错误的。javascript:tree.0(1),括号中的数字是结点的ID
解决方案 »
- 如何判断JS变量是否定义?
- jsdt调试器可以调htm了........疑问:如何调试jsp页面!!!!!
- as2中ExternalInterface.call调用不到JS
- ie6 ie7获取esc的keyCode 怎么获取
- 如何限制文本框只能输入数字,并且可以起带一个小数点
- 上传附件的JS代码上传后提示"文档的顶层无效"的错误
- JS输出表格
- 返回数据应该是什么样子的。。。
- 关于 for 循环的问题,高人请进!!!谢谢!急!
- jqplot图例问题
- <object classid="clsid:F3D0D36F-23F8-4682-……"插件类型ID值是怎么申请的
- jsp代码创建ActiveXObject对象,客户端浏览网页如何能不弹出提示,通过代码方式
<div class="dtree"><div class="dTreeNode"><img id="itree0" src="pic/base.gif" alt="" />ROOT </a></div><div id="dtree0" class="clip" style="display:block;"><div class="dTreeNode"><a href="javascript: tree.o(1);"><img id="jtree1" src="pic/minusbottom.gif" alt="" /></a><img id="itree1" src="pic/folderopen.gif" alt="" /><a href="javascript: tree.o(1);" class="node">AAAA </a></div><div id="dtree1" class="clip" style="display:block;"><div class="dTreeNode"><img src="pic/empty.gif" alt="" /><img src="pic/join.gif" alt="" /><img id="itree2" src="pic/page.gif" alt="" />BBBB </div><div class="dTreeNode"><img src="pic/empty.gif" alt="" /><img src="pic/join.gif" alt="" /><img id="itree3" src="pic/page.gif" alt="" />BBBB </div><div class="dTreeNode"><img src="pic/empty.gif" alt="" /><img src="pic/join.gif" alt="" /><img id="itree4" src="pic/page.gif" alt="" />CCCC </div><div class="dTreeNode"><img src="pic/empty.gif" alt="" /><a href="javascript: tree.o(5);"><img id="jtree5" src="pic/minusbottom.gif" alt="" /></a><img id="itree5" src="pic/folderopen.gif" alt="" /><a href="javascript: tree.o(5);" class="node">DDDD </a></div><div id="dtree5" class="clip" style="display:block;"><div class="dTreeNode"><img src="pic/empty.gif" alt="" /><img src="pic/empty.gif" alt="" /><img src="pic/joinbottom.gif" alt="" /><img id="itree6" src="pic/page.gif" alt="" />EEEE </div></div></div></div></div>
<input id="closeall" type="button" value="closeall"></input>
再在jquery中加入如下代码 $("#openall").click(function(){
wscmtree.openAll();
}
);
$("#closeall").click(function(){
wscmtree.closeAll();
}
);
这几两个按钮是正常的,那个wscmtree怎么会没有被定义呢?
还是那个js的问题应该这样
var wscmtree = new dTree("wscmtree","main/pic/");
wscmtree.add(0, -1, "我的菜单");$(document).ready(function(){
jQuery.ajax({
url:"createmenu.action",
type:"post",
dataType:"json",
async:false,
success: function(data){
以下代码省略----------
至于原因我也不知道,在初始化的时候先给wscmtree一个初值就可以了,唉困绕了好几天的问题了。