接触javaWeb没有多久,碰到一个需求,对我来说头很大,反正没有大神帮忙我是解决不了的。先说一下需求:复选框有三种状态,待选、选中、未选中,我就说一下待选中状态,当节点有子节点的时候,选中子节点,这个节点的所有上层节点都要设置为待选状态,即使当前层次的全部节点被选中,上层节点依然是待选状态,选中父节点,所有下层节点全部选中置灰且不可在点选,取消这个父节点选中状态,所有下级节点全部置为未选中状态。对于最后上传的数据,如果存在父节点,只需要父节点数据,若没有传选中子节点的数据。效果大概就是这个样子的
![](https://img.haomeiwen.com/i1388998/8b269c89fdd2399b.png)
下面展示解决代码
var add=[];//新增权限
var del=[];//修改权限
var checkprestate = true;
var isnull = true;
var checked_other = true;
//获取树
function getTree(sUrl){
$("#rootTree").tree({
url:sUrl,
checkbox:true,
cascadeCheck:false,
lines:true,
queryParams:{'cwr_prj_name':$("#u_Prj").textbox("getValue"),'cwr_prj_area':$("#u_Qu").combobox("getValue"),'cwr_userid':eaf_id},
formatter:function(node){
return node.text;
},
onLoadSuccess:function(node, data){
layer.closeAll();
if(node==null && data!=null){
for(var k=0;k<data.length;k++){
if(data[k].HASCHILDS){
$("#"+data[k].domId+' .tree-checkbox').removeClass('tree-checkbox0');
$("#"+data[k].domId+' .tree-checkbox').removeClass('tree-checkbox1');
$("#"+data[k].domId+' .tree-checkbox').removeClass('tree-checkbox2');
$("#"+data[k].domId+' .tree-checkbox').addClass('tree-checkbox2');
}
}
}else if(node!=null){
for(var k=0;k<data.length;k++){
if(node.children[k].HASCHILDS){
$("#"+node.children[k].domId+' .tree-checkbox').removeClass('tree-checkbox0');
$("#"+node.children[k].domId+' .tree-checkbox').removeClass('tree-checkbox1');
$("#"+node.children[k].domId+' .tree-checkbox').removeClass('tree-checkbox2');
$("#"+node.children[k].domId+' .tree-checkbox').addClass('tree-checkbox2');
}
}
}
if(data.EAF_ERROR!=null){
parent.layer.msg("对不起!未找到对应信息!",{icon:0,time: 3000});
return false;
}
if($("#u_Prj").textbox("getValue")||$("#u_Qu").combobox("getValue")){
//$("#rootTree").tree('expandAll');//查询展开所有节点
var rootsArray = $("#rootTree").tree('getRoots');
if(rootsArray){
for(var i=0;i<rootsArray.length;i++){
var rootNode = rootsArray[i];
if(rootNode){
$("#rootTree").tree('expand',rootNode.target);
}
}
}
}
},
onBeforeCheck:function(node, checked){
//根节点是不能点击的
var haveParent = $('#rootTree').tree('getParent',node.target);
if(haveParent == null){
return false;
}
checkprestate = $("#"+node.domId+' .tree-title').prev().hasClass('tree-checkbox2');
},
onBeforeExpand:function(node){
//layer.load(2);
isnull = $("#"+node.domId+' .tree-title').prev().hasClass('tree-checkbox0');//是否是未勾选状态
checked_other = $("#"+node.domId+' .tree-title').prev().hasClass('tree-checkGray');
},
onExpand:function(node){
layer.closeAll();
var checked = node.checked;
if(node.children){
if(checked || checked_other){//节点选中处理
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkGray');
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+node.domId+' .tree-title').prev().addClass('tree-checkbox');
if(checked){
$("#"+node.domId+' .tree-title').prev().addClass('tree-checkbox1');
}
if(checked_other){
$("#"+node.domId+' .tree-title').prev().addClass('tree-checkGray');
}
for(var i=0;i<node.children.length;i++){
var id=node.children[i].domId;
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+id+' .tree-title').prev().addClass('tree-checkGray');
$("#"+id+' .tree-title').css('color','#a0a0a0');
}
}else if(isnull){
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkGray');
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+node.domId+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+node.domId+' .tree-title').prev().addClass('tree-checkbox');
$("#"+node.domId+' .tree-title').prev().addClass('tree-checkbox0');
for(var i=0;i<node.children.length;i++){
var id=node.children[i].domId;
$("#"+id+' .tree-title').prev().removeClass('tree-checkGray');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+id+' .tree-title').prev().addClass('tree-checkbox');
$("#"+id+' .tree-title').prev().addClass('tree-checkbox0');
$("#"+id+' .tree-title').css('color','#000');
}
}
}
},
onCheck:function(node, checked){
if(checked==false && checkprestate){//用于特殊处理他本来是待选的,现在我勾选,他之前勾选后变成未勾选,但是修改为勾选
$(this).tree('check', node.target);
return false;
}
if(checked){//选中
if(node.children){//如果点击的是父节点
for(var i=0;i<node.children.length;i++){
var id=node.children[i].domId;
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+id+' .tree-title').prev().addClass('tree-checkGray');
$("#"+id+' .tree-title').css('color','#a0a0a0');
if(node.children[i].children){
var subnode =node.children[i].children;
for(var j=0;j<subnode.length;j++){
var subid=subnode[j].domId;
$("#"+subid+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+subid+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+subid+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+subid+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+subid+' .tree-title').prev().addClass('tree-checkGray');
$("#"+subid+' .tree-title').css('color','#a0a0a0');
}
}
}
}
handlecheck(node);
removeDelList(node.EAF_ID);
add.push({'CWR_DATAOBJ_ID':node.EAF_ID,'CWR_TYPE':node.CWR_TYPE,'CWR_PROJ_ID':node.CWR_PRJID,'CWR_COM_ID':node.CWR_COMID});
//处理父节点
rembox(node);
}else{//未选中
if(node.children){
for(var i=0;i<node.children.length;i++){
var id=node.children[i].domId;
$("#"+id+' .tree-title').prev().removeClass('tree-checkGray');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+id+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+id+' .tree-title').prev().addClass('tree-checkbox');
$("#"+id+' .tree-title').prev().addClass('tree-checkbox0');
$("#"+id+' .tree-title').css('color','#000');
if(node.children[i].children){
var subnode =node.children[i].children;
for(var j=0;j<subnode.length;j++){
var subid=subnode[j].domId;
$("#"+subid+' .tree-title').prev().removeClass('tree-checkGray');
$("#"+subid+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+subid+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+subid+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+subid+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+subid+' .tree-title').prev().addClass('tree-checkbox');
$("#"+subid+' .tree-title').prev().addClass('tree-checkbox0');
$("#"+subid+' .tree-title').css('color','#000');
}
}
}
}
removeAddList(node.EAF_ID);
del.push({'CWR_DATAOBJ_ID':node.EAF_ID,'CWR_TYPE':'','CWR_PROJ_ID':'','CWR_COM_ID':''});
//处理父节点
rembox2(node);
}
},
/*onBeforeExpand:function(node){
alert(node.CWR_TYPE);
},*/
animate:true
});
}
function rembox(node){
var prt=$("#rootTree").tree("getParent",node.target);
if(prt){
$("#"+prt.domId+' .tree-title').prev().removeClass('tree-checkbox0');
$("#"+prt.domId+' .tree-title').prev().removeClass('tree-checkbox1');
$("#"+prt.domId+' .tree-title').prev().removeClass('tree-checkbox2');
$("#"+prt.domId+' .tree-title').prev().removeClass('tree-checkbox');
$("#"+prt.domId+' .tree-title').prev().addClass('tree-checkbox2');
$("#"+prt.domId+' .tree-title').prev().addClass('tree-checkbox');
rembox(prt)
}
}
function rembox2(node){
var parent=$("#rootTree").tree("getParent",node.target);
var hsa=false;
if(parent){
for(var i=0;i<parent.children.length;i++){
if(parent.children[i]._checked||$("#"+parent.children[i].domId+' .tree-checkbox2').length>0) hsa=true;
}
if(!hsa){
$("#"+parent.domId+' .tree-checkbox').removeClass('tree-checkbox2');
$("#"+parent.domId+' .tree-checkbox').addClass('tree-checkbox0');
}
if($("#"+parent.domId+' .tree-checkbox2').length==0)
rembox2(parent);
}
}
function handlecheck(node){
getChildren("/txieasyui?taskFramePN=AuthorizationManagement&command=getChildsByPid&colname=json_ajax&colname1={'dataform':'eui_datagrid_data','tablename':'detail0','footerfields':''}&cwr_userid="+eaf_id+"&id="+node.id);
}
//获取选中子项
function getChildren(sUrl){
$.ajax({
type: "POST",
url:sUrl,
async:false,
contentType: "application/json; charset=UTF-8", //必须有
dataType: "json", //表示返回值类型,不必须
success: function (data) {
layer.closeAll();
if(data){
for( var i= 0; i<data.rows.length;i++ ){
removeAddList(data.rows[i].EAF_ID);
var flag = true;
for (var j = 0;j<del.length;j++){
if(data.rows[i].EAF_ID == del[j].CWR_DATAOBJ_ID){
flag = false;
break;
}
}
if(flag){
del.push({'CWR_DATAOBJ_ID':data.rows[i].EAF_ID,'CWR_TYPE':'','CWR_PROJ_ID':'','CWR_COM_ID':''});
}
}
}
}
});
}
function removeAddList(id){
for(var i=0;i<add.length;i++){
if(add[i].CWR_DATAOBJ_ID == id){
add.splice(i,1);
i--;
}
}
}
function removeDelList(id){
for(var i=0;i<del.length;i++){
if(del[i].CWR_DATAOBJ_ID == id){
del.splice(i,1);
i--;
}
}
}
大概的处理就是这样的
数据是这个样子的
[
{
"CWR_PRJID":"00000000000000000000000000000000",
"EAF_ID":"00000000000000000000000000000007",
"EAF_HASCHILD":"1",
"EAF_PID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"CWR_PRJ_AREA":"07",
"EAF_NAME":"钦州市",
"CWR_COMID":"00000000000000000000000000000000",
"HASCHILDS":"true",
"id":"00000000000000000000000000000007",
"text":"钦州市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"02",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"梧州市",
"EAF_ID":"00000000000000000000000000000002",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000002",
"text":"梧州市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"03",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"北海市",
"EAF_ID":"00000000000000000000000000000003",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000003",
"text":"北海市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"04",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"柳州市",
"EAF_ID":"00000000000000000000000000000004",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000004",
"text":"柳州市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"05",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"桂林市",
"EAF_ID":"00000000000000000000000000000005",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000005",
"text":"桂林市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"99",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"无区域项目",
"EAF_ID":"00000000000000000000000000000099",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000099",
"text":"无区域项目",
"state":"closed"
},
{
"CWR_PRJ_AREA":"08",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"贵港市",
"EAF_ID":"00000000000000000000000000000008",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000008",
"text":"贵港市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"09",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"玉林市",
"EAF_ID":"00000000000000000000000000000009",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000009",
"text":"玉林市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"10",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"百色市",
"EAF_ID":"00000000000000000000000000000010",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000010",
"text":"百色市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"01",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"南宁市",
"EAF_ID":"00000000000000000000000000000001",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000001",
"text":"南宁市",
"state":"closed"
},
{
"CWR_PRJ_AREA":"06",
"EAF_PID":"00000000000000000000000000000000",
"EAF_HASCHILD":"1",
"CWR_COMID":"00000000000000000000000000000000",
"CWR_TYPE":"0",
"EAF_NAME":"防城港市",
"EAF_ID":"00000000000000000000000000000006",
"CWR_PRJID":"00000000000000000000000000000000",
"id":"00000000000000000000000000000006",
"text":"防城港市",
"state":"closed"
}
]
到此,这个功能被攻克,👏
网友评论