jquery.jstree 增加節(jié)點(diǎn)的雙擊事件代碼
更新時(shí)間:2010年07月27日 08:53:27 作者:
本文基于 jsTree 1.0-rc1 版本增加節(jié)點(diǎn)的雙擊事件。
jsTree 是基于jquery的樹插件,支持拖放、復(fù)制、刪除、快捷鍵、多選、自定義節(jié)點(diǎn)圖標(biāo)、自定義右鍵菜單、跨頁面保存狀態(tài)等等,總之我想到的它基本上都有了,而且最值得表揚(yáng)的是它讓人感覺一點(diǎn)都不慢哦。
jsTree有節(jié)點(diǎn)選擇事件,即
.bind("select_node.jstree", function(e, data) {
//alert(data.rslt.obj.attr("id") + ":" + data.rslt.obj.attr("rel"));
})
其實(shí)我認(rèn)為它更像是節(jié)點(diǎn)的單擊事件,因?yàn)槊看吸c(diǎn)節(jié)點(diǎn)的時(shí)候它都會觸發(fā),不管之前該節(jié)點(diǎn)是否已經(jīng)被選中。
近日做個(gè)文件管理的東東,需要用到節(jié)點(diǎn)的雙擊事件,如雙擊某個(gè)節(jié)點(diǎn)打開該節(jié)點(diǎn)的編輯頁面。

jstree雖然有雙擊事件,但是并非針對節(jié)點(diǎn)的,而是你雙擊樹所在區(qū)域就會觸發(fā),如上圖任何一個(gè)地方。
離節(jié)點(diǎn)雙擊事件最接近的應(yīng)該就是節(jié)點(diǎn)選擇事件,因此又是“照葫蘆畫瓢”啦。
分析
在第833行 this.get_container() 后是節(jié)點(diǎn)的單擊事件
.delegate("a", "click.jstree", $.proxy(function (event) {
event.preventDefault();
this.select_node(event.currentTarget, true, event);
}, this))
同樣我再這里插入節(jié)點(diǎn)雙擊事件
.delegate("a", "dblclick.jstree", $.proxy(function(event) {
event.preventDefault();
this.dblclick_node(event.currentTarget, true, event);
}, this))
接著,我再實(shí)現(xiàn) dblclick_node 方法就可以了。
在第928行找到 select_node 的代碼,比較復(fù)雜。但里面90%對于雙擊來說是沒有用處的,如處理單選、多選、保存選擇結(jié)果到cookies等。因此 dblclick_node 方法的實(shí)現(xiàn)要比 select_node 簡單很多。
dblclick_node: function(obj, check, e) {
obj = this._get_node(obj);
if (obj == -1 || !obj || !obj.length) { return false; }
this.__callback({ "obj": obj });
},
OK,就這樣了。
使用例子
跟 select_node 用法一樣
.bind("dblclick_node.jstree", function(e, data) {
//alert(data.rslt.obj.attr("id") + ":" + data.rslt.obj.attr("rel"));
})
改造后的代碼下載 /201007/yuanma/jquery.jstree.rar
順便說說
jstree 跟另一個(gè)插件jquery validate 是水火不容的,當(dāng)兩者共存時(shí),jstree雖然也可以構(gòu)造樹出來,但如僵尸一般不能展開。這里mark一個(gè),日后試試能否修改。
作者:Bruce(編程的藝術(shù)世界)
jsTree有節(jié)點(diǎn)選擇事件,即
復(fù)制代碼 代碼如下:
.bind("select_node.jstree", function(e, data) {
//alert(data.rslt.obj.attr("id") + ":" + data.rslt.obj.attr("rel"));
})
其實(shí)我認(rèn)為它更像是節(jié)點(diǎn)的單擊事件,因?yàn)槊看吸c(diǎn)節(jié)點(diǎn)的時(shí)候它都會觸發(fā),不管之前該節(jié)點(diǎn)是否已經(jīng)被選中。
近日做個(gè)文件管理的東東,需要用到節(jié)點(diǎn)的雙擊事件,如雙擊某個(gè)節(jié)點(diǎn)打開該節(jié)點(diǎn)的編輯頁面。

jstree雖然有雙擊事件,但是并非針對節(jié)點(diǎn)的,而是你雙擊樹所在區(qū)域就會觸發(fā),如上圖任何一個(gè)地方。
離節(jié)點(diǎn)雙擊事件最接近的應(yīng)該就是節(jié)點(diǎn)選擇事件,因此又是“照葫蘆畫瓢”啦。
分析
在第833行 this.get_container() 后是節(jié)點(diǎn)的單擊事件
復(fù)制代碼 代碼如下:
.delegate("a", "click.jstree", $.proxy(function (event) {
event.preventDefault();
this.select_node(event.currentTarget, true, event);
}, this))
同樣我再這里插入節(jié)點(diǎn)雙擊事件
復(fù)制代碼 代碼如下:
.delegate("a", "dblclick.jstree", $.proxy(function(event) {
event.preventDefault();
this.dblclick_node(event.currentTarget, true, event);
}, this))
接著,我再實(shí)現(xiàn) dblclick_node 方法就可以了。
在第928行找到 select_node 的代碼,比較復(fù)雜。但里面90%對于雙擊來說是沒有用處的,如處理單選、多選、保存選擇結(jié)果到cookies等。因此 dblclick_node 方法的實(shí)現(xiàn)要比 select_node 簡單很多。
復(fù)制代碼 代碼如下:
dblclick_node: function(obj, check, e) {
obj = this._get_node(obj);
if (obj == -1 || !obj || !obj.length) { return false; }
this.__callback({ "obj": obj });
},
OK,就這樣了。
使用例子
跟 select_node 用法一樣
復(fù)制代碼 代碼如下:
.bind("dblclick_node.jstree", function(e, data) {
//alert(data.rslt.obj.attr("id") + ":" + data.rslt.obj.attr("rel"));
})
改造后的代碼下載 /201007/yuanma/jquery.jstree.rar
順便說說
jstree 跟另一個(gè)插件jquery validate 是水火不容的,當(dāng)兩者共存時(shí),jstree雖然也可以構(gòu)造樹出來,但如僵尸一般不能展開。這里mark一個(gè),日后試試能否修改。
作者:Bruce(編程的藝術(shù)世界)
相關(guān)文章
利用jQuery的動畫函數(shù)animate實(shí)現(xiàn)豌豆發(fā)射效果
本文主要講解jQuery的animate函數(shù)的基本用法,利用動畫函數(shù)animate實(shí)現(xiàn)豌豆發(fā)射的效果,對于學(xué)習(xí)animate很有幫助,有需要的可以參考借鑒。2016-08-08鋒利的jQuery 要點(diǎn)歸納(三) jQuery中的事件和動畫(上:事件篇)
鋒利的jQuery 要點(diǎn)歸納 jQuery中的事件和動畫(上:事件篇)2010-03-03JQuery對id中含有特殊字符的轉(zhuǎn)義處理示例
id中包含其他特殊字符比如 /@ 等為了利用jquery獲取該元素需要轉(zhuǎn)義特殊字符,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-09-09基于JQuery的數(shù)字改變的動畫效果--可用來做計(jì)數(shù)器
之前用javascript做個(gè)計(jì)數(shù)器,從網(wǎng)上搜了搜,找不到合適的,就想著用jquery自己做一個(gè)2010-08-08