1. 程式人生 > >select+ztree自定義下拉框整合ztree

select+ztree自定義下拉框整合ztree

效果圖:

一、需要引入檔案有:jquery.js、zTree/2.6/zTreeStyle.css、zTree/2.6/jquery.ztree-2.6.min.js

       注意引入先後順序要先引入jquery.js;

二、html程式碼:

<input type="text" name="department_name" id="department_name" value="${pd.department_name}" 
	maxlength="100" placeholder="點選選擇組織機構" title="組織機構" style="width:98%;" readonly="readonly"
	onclick="initTree()"/>
<input type="hidden" name="department_id" id="department_id" value="${pd.department_id}" />	
<div id="departmentTreeDiv" style="display:none;background-color: white;position:absolute;z-index:9999;border: 1px solid #DDDDDD">  							        	
      <ul id="departmentTree" class="tree"></ul>	        
</div>

<script type="text/javascript">
    var treeDataList=${departmentList};
    function initTree(){
	      //傳入所需要的id屬性名
            treeDiv("departmentTree","departmentTreeDiv","department_name","department_id",);
    }

</script> 

解釋:第一個input用於存放ztree選中後節點的名稱name;第二個input用於存放ztree選中節點後對應的id值;div用於承載整個樹形結構;

三、treeDiv.js工具(ztree的操作):

//自定義下拉框整合ztree
//機構樹
/*傳入引數tree:用於承接ztree的ul的id;treeDivId:用於承接ztree的div的id;inputId:接受顯示選中文字的input的id;
	     inputHideId:接受選中文字對應的id的input的id(一個hidden的input);treeDataList:形成樹形需要的資料陣列;
*/
var zTree;
var treeId;
function treeDiv(tree,treeDivId,inputId,inputHideId,treeDataList){
	treeId=tree;
	var departmentList=treeDataList;
	var setting = {
		showLine: true,
		checkable: false,
		callback:{
			 beforeClick:zTreeBeforeClick
		}
	};								
	zTree = $("#"+tree+"").zTree(setting, departmentList);
	function zTreeBeforeClick(treeId, treeNode){
		$("#"+treeDivId+"").css("display","none");
		$("#"+inputId+"").val(treeNode.name);
		$("#"+inputHideId+"").val(treeNode.id);
	}
	ck(treeDivId,inputId);
}
function ck(treeDivId,inputId){
    //控制departmentTreeDiv承接樹形結構的div的隱藏			
    var obj=$("#"+treeDivId+"");
    var oBtn=$("#"+inputId+"");	 
    document.onclick=function(event){
	var e=event || window.event;//相容ie和非ie的event
        var aim=e.srcElement || e.target; //相容ie和非ie的事件源		   		       
        if(e.srcElement){
	       var aim=e.srcElement;
	       aimFun(aim,oBtn,obj);
        }else{
    	   var aim=e.target;
    	   aimFun(aim,oBtn,obj);    		          
        }
    }
}
function aimFun(aim,oBtn,obj){
     var f=true;
     if(aim==oBtn[0]){
	   obj.toggle();
     }
     if(aim.toString()=="[object HTMLButtonElement]"){
	    var btn=obj.find("button");
    	f=setTval(aim,btn);
     }
     if(aim.toString()=="[object HTMLLIElement]"){
	   var li=obj.find("li");
    	f=setTval(aim,li);
     }
     if(aim.toString()=="[object HTMLUListElement]"){
	   var ul=obj.find("ul");
    	f=setTval(aim,ul);
     }
     if(aim!=oBtn[0] && aim!=obj[0] && f){
	   obj.css("display","none");

     } 

//當多個樹形結構時,點選其中一個input暫時樹形時,隱藏其他的樹形結構div   

     var ulArr=$(".tree");       
     for(var i=0; i<ulArr.length;i++){
    	 if(treeId!=$(ulArr[i]).attr("id")){
    		 $(ulArr[i]).parent().css("display","none");
    	 }
     }
}
function setTval(aim,arr){
	var f=true;
	if(arr !=null &&arr!=undefined && arr.length>0){
		for(var i=0;i<arr.length;i++){
			if(aim==arr[i]){
				f=false;
				return;
			}
		}
	}
	return f;
}

四、後臺方法:

1、controller:

import net.sf.json.JSONArray;

@RequestMapping(value="/goAdd")
public ModelAndView goAdd()throws Exception{
ModelAndView mv = this.getModelAndView();
//樹資料
List<Map<String,Object>> depList=service.findTreeList("0");
JSONArray departmentList= JSONArray.fromObject(depList);
mv.addObject("departmentList",departmentList);
mv.setViewName("jsp頁面");
return mv;
}

2、impl:

/**
 * 獲取tree資料,遞迴實現
 * @param parentId
 * @return
 * @throws Exception
 */
@Override
public List<Map<String, Object>> findTreeList(String parentId) throws Exception {

List<Map<String,Object>>  list=(List<Map<String,Object>>)

               session.findForList("mapper.findTreeList"parentId);

 for( Map<String, Object> map : list) {
 map.put("nodes",findTreeList(map.get("id").toString()));
 }
return list;
}

3、mapper.xml:

<!-- 通過pId查詢客戶組織機構 ,首次pId="0"-->
<select id="findClientDepartmentList" parameterType="String" resultType="pd">
select o.department_id  "id",o.name  "name",o.parent_id  "pId" from  department o  where o.parent_id=                        # {parentId} 

</select>

五、前臺接收的資料結構如下供參考:

[{"nodes":[{"nodes":[{"nodes":[],"name":"客服B組","pId":"cbbc84eddde947ba8af7d509e430eb70","id":"83a25761c618457cae2fa1211bd8696d"},
{"nodes":[{"nodes":[],"name":"1隊","pId":"8f8b045470f342fdbc4c312ab881d62b","id":"a0982dea52554225ab682cd4b421de47"}],"name":"客服A組","pId":"cbbc84eddde947ba8af7d509e430eb70","id":"8f8b045470f342fdbc4c312ab881d62b"}],"name":"客服部","pId":"5cccdb7c432449d8b853c52880058140","id":"cbbc84eddde947ba8af7d509e430eb70"}],
"name":"C公司","pId":"0","id":"5cccdb7c432449d8b853c52880058140"},{"nodes":[{"nodes":[{"nodes":[],"name":"客戶關懷","pId":"d41af567914a409893d011aa53eda797","id":"0956d8c279274fca92f4091f2a69a9ad"},
{"nodes":[],"name":"客戶解惑","pId":"d41af567914a409893d011aa53eda797","id":"3e7227e11dc14b4d9e863dd1a1fcedf6"}],"name":"客戶部","pId":"a6c6695217ba4a4dbfe9f7e9d2c06730","id":"d41af567914a409893d011aa53eda797"}],"name":"D公司","pId":"0","id":"a6c6695217ba4a4dbfe9f7e9d2c06730"}]);

	

六、本工具沒有控制自適應承載ztree的div的寬度,請自行更具需要設定寬度,預設寬度為展開的樹形的寬度,需要其他方法,可在treeDiv.js裡面進行擴充套件,望能夠幫助有需要的人,不對之處請多多指正,謝謝!

相關推薦

select+ztree定義整合ztree

效果圖: 一、需要引入檔案有:jquery.js、zTree/2.6/zTreeStyle.css、zTree/2.6/jquery.ztree-2.6.min.js        注意引入先後順序要先引入jquery.js; 二、html程式碼: <input

【4】定義

order viewport down jquer pos bottom last png 下拉框 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

定義樣式,利用prototype制作

制作 pointer code javascrip .text att .com 自定義 cti <script type="text/javascript" src="js/jquery-1.7.2.min.js" ></script>

移動端定義【H5+js+css】

var weekdayArr = ['男', '女'];// var age1 = ['18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '3

SELECT2定義

SELECT2自定義下拉框 安裝 參考:Getting Started | Select2 - The jQuery replacement for select boxes 快速使用 html: <select class="js-ex

安卓定義---Spinner的實現

最近專案中用到下拉列表,剛開始一頭霧水,後來在網上找了一個Demo,自己修改了一下,現在把它分享出來,給大家參考,寫的不好,多多關照!不過功能還是實現的了······先上圖給大家看看效果! 效果圖: 實現思路: 1.定義下拉控制元件佈局(ListView及子控

JS外掛——定義

HTML的原生select標籤,很多東西改不了,限制太大,不同的瀏覽器顯示的樣式還不一樣,尤其是當需要相容IE7、IE8時問題更多,想做一個美觀的下拉框,最終還是得自定義來實現。 效果圖: 這裡沒有做過多的美化,需求就是要這麼個簡潔的。當

vue定義元件

<template> <div class="selection-component"> <div class="selection-show" @click="toggleDrop"> <span :class="{'active': isDr

jqGrid之定義

目的:使用者表中的負責人,做成下拉框模式,下拉框的選項為負責人中的資料。 1.首先js獲取負責人資料(陣列格式) var g_ary=[]; var g_fpid=null; $(

android中定義

android自帶的下拉框好用不?我覺得有時候好用,有時候難有,專案規定這樣的效果,自帶的控制元件實現不了,那麼只有我們自己來老老實實滴寫一個新的了,其實最基本的下拉框就像一些資料填寫時,點選的時候出現在編輯框的下面,然後又很多選項的下拉框,可是我在網上找了一下,沒有這種下

原生js實現一個定義單選選擇

  瀏覽器自帶的原生下拉框不太美觀,而且各個瀏覽器表現也不一致,UI一般給的下拉框也是和原生的下拉框差別比較大的,這就需要自己寫一個基本功能的下拉選單/下拉選擇框了。最近,把專案中用到的下拉框元件重新封裝了一下,以建構函式的方式進行封裝,主要方法和事件定義在原型上,下面是主要的實現程式碼並添加了比較詳細的註釋

jqGrid 單元格編輯 定義選擇 動態資料來源 通用實現

jqGrid編輯型別可分為:單元格編輯(Cell editing)、行內編輯(Inline editing)和表單編輯(Form editing),本文討論單元格編輯模式下,下拉選擇框的通用實現。jqGrid自帶下拉選擇框編輯型別,只要設定edittype='select’並設定editop

wxpython定義列表

自定義wxpython下拉列表框,支援修改邊框顏色,按鈕圖示的動態變換 原理同前兩片文章一樣,使用了兩個wx.staticText做邊框,一個文字框來顯示下拉列表的資料,和一個圖片按鈕,實現下拉的標誌,和一個自帶的列表框, 影藏該列表框,不要原來的樣式,這裡只需要使用它的展示列表的資料功能  

定義列表select樣式

jq: $(".select-head").each(function(){ $(this).click(function(event) {//自定義下拉列表框顯示和隱藏console.log(0);$(this).siblings("ul.option").toggleC

select定義箭頭

現場還原 在HTML5開發APP應用的過程中,有些表單頁面需要用到select標籤,開發的時候用的安卓手機測試,樣式的顯示非常完美,但一用蘋果手機測試,select的下拉箭頭就不會顯示。 <!DOCTYPE html> <html la

Android PullToRrefresh 定義刷新動畫 (listview、scrollview等)

appear ram nal ima cas 創建 protect tom inter PullToRefreshScrollView 自定義下拉刷新動畫,只需改一處。 以下部分轉載自http://blog.csdn.net/superjunjin/article/

使用 CSS overscroll-behavior 控制滾動行為:定義刷新和溢出效果

pull str 新的 title contain 下拉刷新 介紹 select data CSS 的新屬性 overscroll-behavior 允許開發者覆蓋默認的瀏覽器滾動行為,一般用在滾動到頂部或者底部。 背景 滾動邊界和滾動鏈接(boundary & c

WPF 定義列表

LV mage png gif ces hid IT orm false XAML代碼: <Popup x:Name="popupStrategy" StaysOpen="False" PopupAnimation="Scroll" Width="190"

ABAP如何定義列表 .

app class AD 定義 fault pre amp 列表 nbsp 1. 在選擇屏幕上添加下拉列表控件, 代碼如下: PARAMETERS: auart LIKE vapma-auart AS LISTBOX VISIBLE LENGTH 6

jq定義菜單,當用戶點擊非自身元素(菜單)本身時關閉菜單

info alt one === 下拉 AS 菜單 com code jq自定義下拉菜單,當用戶點擊非自身元素(下拉菜單)本身時關閉下拉菜單 截圖: 代碼如下: //關閉用戶菜單 $(document).mousedown(function(e){