項(xiàng)目中要求選個(gè)樹形解構(gòu)的下拉框,經(jīng)過查找测萎,目標(biāo)鎖定easyui 的combotree,但是隨著項(xiàng)目的開發(fā)增加了兩個(gè)功能:1.要能搜索衬吆,2.點(diǎn)擊父節(jié)點(diǎn)不選中,只是展開/關(guān)閉節(jié)點(diǎn) 绳泉。搜索好解決(具體可參考:為jQuery EasyUI tree增加搜索功能(一)),主要來看看需求2逊抡。
我們打開官網(wǎng)的例子可以看到,當(dāng)我們點(diǎn)擊父節(jié)點(diǎn)的時(shí)候零酪,父節(jié)點(diǎn)被選中到結(jié)果里面了冒嫡。然而難免會(huì)遇到不選父節(jié)點(diǎn),只是展開的情況四苇。
于是開始搜索是否有和我情況相同的做法孝凌。幸好,果然有easyui中combotree只能選子選項(xiàng)月腋,父級(jí)不被選中蟀架。于是動(dòng)手嘗試吧,據(jù)這篇文章所說榆骚,先增加了 onBeforeSelect的回調(diào)片拍,如果我的數(shù)據(jù)結(jié)構(gòu)中,type==0
(父節(jié)點(diǎn)的數(shù)據(jù)),就return false
;
onBeforeSelect:function(node){
if(node.type==0){
return false;
}
},
然而結(jié)果只是不賦值到結(jié)果集合妓肢,我需要不僅僅是不選中捌省,還要展開。
經(jīng)過各種嘗試碉钠,我只能另辟蹊徑纲缓,我發(fā)現(xiàn)當(dāng)多選卷拘,并且onlyLeafCheck:true
的情況下,點(diǎn)擊父節(jié)點(diǎn)是沒有任何反應(yīng)的祝高,這樣就不會(huì)選中父節(jié)點(diǎn)的值栗弟,下面我希望點(diǎn)擊父節(jié)點(diǎn)他能夠展開關(guān)閉,經(jīng)過觀察發(fā)現(xiàn)可以通過觸發(fā)旁邊的小箭頭來實(shí)現(xiàn)工闺。
onBeforeSelect: function (node) {//父節(jié)點(diǎn)上觸發(fā)節(jié)點(diǎn)展開收起
if (node.type == 0) {
$(node.target).find('.tree-hit').trigger('click');
}
},
至此我的需求實(shí)現(xiàn)了乍赫,但是由于用了復(fù)選的,多了個(gè)問題斤寂,就是可以選中多個(gè)值耿焊,最后我們來整理下結(jié)果就好了,永遠(yuǎn)取最后一個(gè)值遍搞。
onCheck: function (node, checked) {
_this.combotree("setValue",node.id);//_this指的是調(diào)用combotree的元素
_this.combo("hidePanel")//選中后關(guān)閉下拉框
},
下面分享下代碼罗侯,包括需求1,2溪猿,還有清除選項(xiàng)功能钩杰。
效果展示
項(xiàng)目地址