EXTJs中带复选框的tree怎样实现: 1、选中父节点时所有子节点也被选中;2、无论多少个节点只有一个被选中
解决方案 »
- fckeditor中输入url自动转超链接问题
- 正则表达式
- 同样一段代码为什么将它copy到别处就不显示
- JS读取关于vml的xml问题(急)
- js的FSO问题 急,散分!!!!请各位高手帮忙!
- <a href="javascript:;" onClick="function();">和<a href="javascript:function();">调用函数有什么区别?
- 怎样获取主窗口打开了哪些子窗口?
- 把:03-22-2004 转为:2004年3月22日 有直接的函数可以转吗?
- 在线等候:如何指定浏览器用“中”的字体大小浏览网页?先
- 在线等待!!!急急急急………
- jquery的tree插件中,哪个性能更高一些?
- 高手速来。。
http://www.cnblogs.com/mogen_yin/archive/2008/10/28/1321069.html你看看这个能不能满足你的要求
<body>
<script>
Ext.BLANK_IMAGE_URL = "../resources/images/default/s.gif";
Ext.QuickTips.init();
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
Ext.onReady(function(){
/************************** 联系人树形菜单**************************/
var contacterTree = new Ext.tree.TreePanel({
id:"treePanelContact",
border:false,
lines:false, // 去掉树的线
rootVisible:true,
autoScroll:true,
animate:true,
width:200,
height : 468,
style:"background-color:#FFFFFF;border-color:#0099FF;",
// enableDD: false, // 允许树可以拖拽
containerScroll: true,
loader: new Ext.tree.TreeLoader({
dataUrl:'<%=path%>/treeOperation.do?action=loadTree'
}),
root:new Ext.tree.AsyncTreeNode({
id : "treeContact",
text: '联系人',
draggable:false,
expanded: true // 展开根节点下的节点
}),
listeners:{
click : function(node){
if(node.id == "treeContact"){
// 如果点击的是根节点,则 GridPanel 显示所有的数据
// store.load({params:{flag:'all'}});
}
else if(node.isLeaf() == true){
// 如果点击的是枝节点的话,则根据 ID 查询联系人的信息
// store.load({params:{flag:'contacter',contacterId:node.id}});
}else{
// 如果既不是根节点也不是枝节点,那么点击的就是分组节点,
// 则 GridPanel 显示对应分组号的联系人信息
// store.load({params:{flag:'group',groupId:node.id}});
}
}
}
});
// 添加 树的右键菜单
contacterTree.on('contextmenu', menuShow);
function menuShow ( node )
{
treeRightMenu.show(node.ui.getAnchor());
node.select();//让右击是选中当前节点
};
var treeRightMenu = new Ext.menu.Menu({
id: 'treeMenuContext',
items: [
{
text: '搜索联系人',
icon:"../images/shared/icons/fam/search.gif",
handler:function()
{
Search_Contacter("搜索联系人"); // 具体可以根据自己的需求来写。。
}
},
{
text: '添加联系人',
icon:"../images/shared/icons/fam/add.gif",
handler:function()
{
AddContacter("新增联系人"); // 具体可以根据自己的需求来写。。
}
},{
text: '添加分组',
icon:"../images/shared/icons/fam/add.gif",
handler:function()
{
AddContacterGroup("新增分组"); // 具体可以根据自己的需求来写。。
}
},{
text: "删除",
icon: "../images/shared/icons/fam/delete.gif",
handler:function()
{
treeDelContacter(); // 具体可以根据自己的需求来写。。
}
}
/* ,{
text:"修改",
icon: "../images/shared/icons/fam/cog_edit.png",
handler:function()
{
treeEditContacter();
}
} */
]
});
// 当选中父节点时,让其子节点相应选中
contacterTree.on('checkchange', function(node, checked) {
node.expand();
node.attributes.checked = checked;
node.eachChild(function(child) {
child.ui.toggleCheck(checked);
child.attributes.checked = checked;
child.fireEvent('checkchange', child, checked);
});
}, contacterTree);
// 删除事件
function treeDelContacter(){
// 当右键点击删除时,先判断右键点击的是分组节点还是枝节点
// 通过选择模型来得到右键点击的节点
var selectModel = contacterTree.getSelectionModel();
var node = selectModel.getSelectedNode();
if(node.id == "treeContact"){
// 右键根节点
Ext.MessageBox.alert("提示","根节点是不允许删除的!");
}else if(node.isLeaf() == true){
// 右键 联系人节点
var flag = confirm("您确定要删除名为 :“"+node.text+" ”的联系人信息吗?");
if(flag == true){
location.href="<%=path%>/contacterManage.do?action=delContacters&strContacterId="+node.id+";";
//alert("成功删除名为 :"+node.id+" 的联系人信息!");
}
}else{
// 右键 分组节点
var flag = confirm("您确定要删除名为 :“"+node.text+" ”的分组信息吗?");
if(flag == true){
//alert("成功删除名为 :"+node.id+" 的分组信息!");
location.href="<%=path%>/contacterManage.do?action=delContacterGroup&strGroupId="+node.id+";";
}
}
}
// 修改事件
/* function treeEditContacter(){
// 当右键点击删除时,先判断右键点击的是分组节点还是枝节点
// 通过选择模型来得到右键点击的节点
var selectModel = contacterTree.getSelectionModel();
var node = selectModel.getSelectedNode();
if(node.id == "treeContact"){
// 右键根节点
Ext.MessageBox.alert("提示","根节点是不允许修改的!");
}else if(node.isLeaf() == true){
// 右键 联系人节点
}else{
// 右键 分组节点
}
} */
});
在TreePanel 中增加这个监听
<code>
listeners : {
checkchange : function(node,checked){
if(checked){
var checkedNodes = tree.getChecked();
for(i=0;i<checkedNodes.length;i++){
var checkeNode = checkedNodes[i];
if(node.id!=checkeNode.id){
checkeNode.getUI().checkbox.checked = false;
checkeNode.attributes.checked = false;
tree.fireEvent('check', checkeNode, false);
}
}
}
}
}
</code>