日期:2014-05-16  浏览次数:20567 次

OA权限树搭建 代码
<ul id="tree">
										<s:iterator value="#application.topPrivilegeList">
											<li>
<input type="checkbox" name="privilegeIds" value="${id}" id="ck_${id}" onclick="doChecked(this)"
					    <s:property value="%{id in privilegeIds?'checked':''}"/> />
					   <label for="ck_${id}"><span class="folder">${name}</span></label>
												<ul>
													<s:iterator value="children">
														<li>
<input type="checkbox" name="privilegeIds" value="${id}" id="ck_${id}" onclick="doChecked(this)"
					    <s:property value="%{id in privilegeIds?'checked':''}"/> />
					   <label for="ck_${id}"><span class="folder">${name}</span></label>
															<ul>   
																<s:iterator value="children">
																	<li>
		<input type="checkbox" name="privilegeIds" value="${id}" id="ck_${id}"  onclick="doChecked(this)"
					    <s:property value="%{id in privilegeIds?'checked':''}"/> />
					   <label for="ck_${id}"><span class="folder">${name}</span></label>
																</li>
																</s:iterator>
															</ul>
														</li>
													</s:iterator>
												</ul>
											</li>
										</s:iterator>
									</ul>

取消/选中上下级 跟随变化的js

 <script type="text/javascript">
        	$("#tree").treeview();
        </script>
        
  <script type="text/javascript">
	function doChecked(inp){
		
		// 当选中或取消一个权限时,也同时选中或取消所有的下级权限
		var boo=$(inp).attr("checked");
		/* alert(boo); */
		$(inp).siblings("ul").find("input").attr("checked", boo);
		
		// 当选中一个权限时,也要选中所有的直接上级权限
		if(inp.checked == true){
			$(inp).parents("li").children("input").attr("checked", true);
		}else{
			// 如果当前是取消选中,并且同级中没有被选中的项,则也取消上级的选中状态
			var jCheckedSibingCB = $(inp).parent("li").siblings("li").children("input[type=checkbox]:checked");
			
			if(jCheckedSibingCB.size() == 0){
				
				var jCheckboxInput = $(inp).parent().parent("ul").prev("label").prev("input[type=checkbox]");
				jCheckboxInput.attr("checked", 0);
				 
				// 递归操作每一层直属上级
				var jParentLi = jCheckboxInput.parent("li");
				if(jParentLi.size() > 0){
					doChecked(jCheckboxInput);
				} 
			
			}}
		
	}