目前项目收尾,开始对之前的,之前用的一个树节点的插件,只可以使用单击事件,无法使用双击事件,于是百度一下,自定义了一个双击事件,原理是通过两次时间差来定义,代码如下:
1 //最后一次触发节点Id自定义双击实现的功能
2 var lastSelectedNodeId = null;
3 //最后一次触发时间
4 var lastSelectTime = null;
5
6 //在这里自定义双击需要实现的功能
7 function doubliclick(data){
8
9 }
10
11 //clicknode单击事件
12 function clickNode(event, data) {
13 if (lastSelectedNodeId && lastSelectTime) {
14 var time = new Date().getTime();
15 var t = time - lastSelectTime;
16 if (lastSelectedNodeId === data.nodeId && t < 500) {
17 customBusiness(data);
18 }
19 }
20 lastSelectedNodeId = data.nodeId;
21 lastSelectTime = new Date().getTime();
22
23 }
24
25 //自定义双击事件
26 function customDblClickFun() {
27 //节点选中时触发
28 $('#nodeselect').on('nodeSelected', function (event, data) {
29 clickNode(event, data)
30 });
31 //节点取消选中时触发
32 $('#nodeselect').on('nodeUnselected', function (event, data) {
33 clickNode(event, data)
34 });
35 }
36
37 //调用双击事件的播放方法
38 $(document).ready(function () {
39 doubliclick();
40 });
写好了这个方法之后,发现和原生的单击方法有冲突,以我用的插件为例,我发现虽然单双击功能有冲突,但是在选中的时候背景依旧会变色,于是找到插件的js文件,以click和selected为关键字查找,打上断点,调试,找到单击的事件
Tree.prototype.setSelectedState = function (node, state, options) {原JS文件里的单击事件
if (state === node.state.selected) return;
if (state) {
// If multiSelect false, unselect previously selected
if (!this.options.multiSelect) {
$.each(this.findNodes('true', 'g', 'state.selected'), $.proxy(function (index, node) {
this.setSelectedState(node, false, options);
}, this));
}
// Continue selecting node
node.state.selected = true;
if (!options.silent) {
this.$element.trigger('nodeSelected', $.extend(true, {}, node));
}
}
else {
// Unselect node
node.state.selected = false;
if (!options.silent) {
this.$element.trigger('nodeUnselected', $.extend(true, {}, node));
}
}
};
在单击事件里加上想要实现的单击功能即可