前言

扩展自$.fn.combo.defaults和$.fn.tree.defaults。使用$.fn.combotree.defaults重写默认值对象。下载该插件翻译源码

树形下拉框结合选择控件和下拉树控件。它与combobox(下拉列表框)类似,但是将下拉列表框的列表替换成了树形控件。该控件支持树状态复选框,方便多选操作

依赖关系

  • combo
  • tree

源码

/**
* jQuery EasyUI 1.3.2
*
*翻译: qq 1364386878 下拉树
*/
(function ($) {
//设置大小
function setSize(jq) {
var options = $.data(jq, "combotree").options;
var combotree = $.data(jq, "combotree").tree;
$(jq).addClass("combotree-f");
$(jq).combo(options);
var panel = $(jq).combo("panel");
if (!combotree) {
combotree = $("<ul></ul>").appendTo(panel);
$.data(jq, "combotree").tree = combotree;
}
combotree.tree($.extend({},
options, {
checkbox: options.multiple,
onLoadSuccess: function (node, data) {
var values = $(jq).combotree("getValues");
if (options.multiple) {
var checkedNodes = combotree.tree("getChecked");
for (var i = 0; i < checkedNodes.length; i++) {
var id = checkedNodes[i].id;
(function () {
for (var i = 0; i < values.length; i++) {
if (id == values[i]) {
return;
}
}
values.push(id);
})();
}
}
$(jq).combotree("setValues", values);
options.onLoadSuccess.call(this, node, data);
},
onClick: function (node) {
select(jq);
$(jq).combo("hidePanel");
options.onClick.call(this, node);
},
onCheck: function (node, node) {
select(jq);
options.onCheck.call(this, node, node);
}
}));
};
//选择
function select(jq) {
var options = $.data(jq, "combotree").options;
var combotree = $.data(jq, "combotree").tree;
var vv = [], ss = [];
if (options.multiple) {
var checkedNode = combotree.tree("getChecked");
for (var i = 0; i < checkedNode.length; i++) {
vv.push(checkedNode[i].id);
ss.push(checkedNode[i].text);
}
} else {
var checkedNode = combotree.tree("getSelected");
if (checkedNode) {
vv.push(checkedNode.id);
ss.push(checkedNode.text);
}
}
$(jq).combo("setValues", vv).combo("setText", ss.join(options.separator));
};
//设置数组值
function setValues(jq, values) {
var options = $.data(jq, "combotree").options;
var combotree = $.data(jq, "combotree").tree;
combotree.find("span.tree-checkbox").addClass("tree-checkbox0").removeClass("tree-checkbox1 tree-checkbox2");
var vv = [], ss = [];
for (var i = 0; i < values.length; i++) {
var v = values[i];
var s = v;
var node = combotree.tree("find", v);
if (node) {
s = node.text;
combotree.tree("check", node.target);
combotree.tree("select", node.target);
}
vv.push(v);
ss.push(s);
}
$(jq).combo("setValues", vv).combo("setText", ss.join(options.separator));
};
//实例化下拉树
$.fn.combotree = function (target, parm) {
if (typeof target == "string") {
var method = $.fn.combotree.methods[target];
if (method) {
return method(this, parm);
} else {
return this.combo(target, parm);
}
}
target = target || {};
return this.each(function () {
var combotree = $.data(this, "combotree");
if (combotree) {
$.extend(combotree.options, target);
} else {
$.data(this, "combotree", {
options: $.extend({},
$.fn.combotree.defaults,
$.fn.combotree.parseOptions(this),
target)
});
}
setSize(this);
});
};
//默认方法
$.fn.combotree.methods = {
//返回属性对象
options: function (jq) {
var options = $.data(jq[0], "combotree").options;
options.originalValue = jq.combo("options").originalValue;
return options;
},
//返回树形对象
tree: function (jq) {
return $.data(jq[0], "combotree").tree;
},
//读取本地树形数据
loadData: function (jq, data) {
return jq.each(function () {
var options = $.data(this, "combotree").options;
options.data = data;
var tree = $.data(this, "combotree").tree;
tree.tree("loadData", data);
});
},
//再次请求远程树数据。通过'url'参数重写原始URL值
reload: function (jq, url) {
return jq.each(function () {
var options = $.data(this, "combotree").options;
var tree = $.data(this, "combotree").tree;
if (url) {
options.url = url;
}
tree.tree({ url: options.url });
});
},
//设置组件值数组
setValues: function (jq, values) {
return jq.each(function () {
setValues(this, values);
});
},
//设置组件值。
setValue: function (jq, value) {
return jq.each(function () {
setValues(this, [value]);
});
},
//清空控件的值
clear: function (jq) {
return jq.each(function () {
var tree = $.data(this, "combotree").tree;
tree.find("div.tree-node-selected").removeClass("tree-node-selected");
var cc = tree.tree("getChecked");
for (var i = 0; i < cc.length; i++) {
tree.tree("uncheck", cc[i].target);
}
$(this).combo("clear");
});
},
//重置
reset: function (jq) {
return jq.each(function () {
var options = $(this).combotree("options");
if (options.multiple) {
$(this).combotree("setValues", options.originalValue);
} else {
$(this).combotree("setValue", options.originalValue);
}
});
}
};
//解析器
$.fn.combotree.parseOptions = function (target) {
return $.extend({}, $.fn.combo.parseOptions(target),
$.fn.tree.parseOptions(target));
};
//默认属性、事件 继承comb和tree的
$.fn.combotree.defaults = $.extend({},
$.fn.combo.defaults,
$.fn.tree.defaults,
{
//定义用户是否可以直接输入文本到字段中
editable: false
});
})(jQuery);

示例代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic ComboTree - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
<script src="../../plugins2/jquery.parser.js"></script>
<script src="../../plugins2/jquery.validatebox.js"></script>
<script src="../../plugins2/jquery.panel.js"></script>
<script src="../../plugins2/jquery.combo.js"></script>
<script src="../../plugins2/jquery.draggable.js"></script>
<script src="../../plugins2/jquery.droppable.js"></script>
<script src="../../plugins2/jquery.tree.js"></script>
<script src="../../plugins2/jquery.combotree.js"></script>
</head>
<body>
<h2>Basic ComboTree</h2>
<div class="demo-info">
<div class="demo-tip icon-tip"></div>
<div>Click the right arrow button to show the tree panel.</div>
</div>
<div style="margin:10px 0"></div>
<input class="easyui-combotree" data-options="url:'../combotree/tree_data1.json',required:true" style="width:200px;"> </body>
</html>

插件效果

easyui源码翻译1.32--ComboTree(树形下拉框)的更多相关文章

  1. easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)

    前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...

  2. easyui源码翻译1.32--TreeGrid(树形表格)

    前言 扩展自$.fn.datagrid.defaults.使用$.fn.treegrid.defaults重写默认值对象.下载该插件翻译源码 树形表格用于显示分层数据表格.它是基于数据表格.组合树控件 ...

  3. EasyUI:combotree(树形下拉框)复选框选中父节点(子节点的状态也全部选中)输入框中只显示父节点的文本值

    参考: https://blog.csdn.net/weixin_43236850/article/details/100320564

  4. easyui源码翻译1.32--Combo(自定义下拉框)

    前言 扩展自$.fn.validatebox.defaults.使用$.fn.combo.defaults重写默认值对象.下载该插件翻译源码 自定义下拉框显示一个可编辑的文本框和下拉面板在html页面 ...

  5. 雷林鹏分享:jQuery EasyUI 表单 - 创建树形下拉框

    jQuery EasyUI 表单 - 创建树形下拉框 树形下拉框(ComboTree)是一个带有下列树形结构(Tree)的下拉框(ComboBox).它可以作为一个表单字段进行使用,可以提交给远程服务 ...

  6. Ext5实现树形下拉框ComboBoxTree

    最近为了实现一个属性下拉框被Ext框架折腾了好几天.. 所以,首先要说的是,不管你要做什么系统.强烈建议你不要选择Ext.据我这几天的搜索,应该这个框架现在用的人也很少了. Ext框架的缺陷:框架沉重 ...

  7. Vue实现树形下拉框

    Vue自身并没有实现树形下拉框的组件,找了很多资料,最后在Github上找了个插件vue-treeselect,功能还是比较全的,模糊搜索.多选.延迟加载.异步搜索.排序,自定义.Vuex支持等等.这 ...

  8. Dorado开发——树形下拉框

    最近在学习Dorado开发的过程中,遇到了一个问题,Dorado的树形下拉框选择:Dorado默认情况下父节点和子节点都是可选的,而我要实现的是父节点不可选. 解决办法:在下拉框中,判断父子节点,点击 ...

  9. easyui源码翻译1.32--datagrid(数据表格)

    前言 此前网上有easyui1.25的源码  应该算是比较老的版本  之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34  1.33开始支持css3 算是又一个转折  但是 ...

随机推荐

  1. Mongodb集群节点故障恢复场景分析

    http://blog.csdn.net/zhangzhaokun/article/details/6299527 一个适当配置的Mongodb分片集群是没有单点故障. 本文描述了分片集群中存在的几种 ...

  2. mysqlimport 导入文件到数据库命令

    mysqlimport -h 172.16.145.125 -u ocetl -pocetl test  --fields-terminated-by='|' '/home/ocetl/tmp_use ...

  3. 适配----Autolayout

    AutLayout 相对布局,根据参照视图的位置 来定义自己的位置.通过约束视图和视图之间的关系来分配屏幕上的位置,通常与VFL语言配合使用 VFL(visual format language)视觉 ...

  4. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  5. js和jq使用submit方法无法提交表单

    昨天,在做一个表单异步提交内容的时候,遇到很奇怪的问题,submit()方法无法进行提交,每次提交都是把 当前给刷新了,网络抓包发现,每次都是 get方式去获取 当前页面,完全没有post 请求,想着 ...

  6. BootstrapDialog.show函数底层简化

    平台用的全部都是BootStrapDialog的弹窗,然后美工设计了一个统一的样式,每次写的时候,都要对其进行样式重写:写吐了快,所以对BootStrap.底层做了修改: 也就是说,只要你要写的界面包 ...

  7. 使用Class.getResource和ClassLoader.getResource方法获取文件路径

    自从转投Java阵营后,一直发下Java程序的路径读取异常麻烦,因此查阅了比较多的版本内容,整合了一份自己的学习笔记.主要使用Class及通过ClassLoader来动态获取文件路径. 查阅链接如下: ...

  8. 【仿携程JQuery日期价格表】

    今天比较闲所以就花点时间又写了点东西. 相信这种价格表大家不会陌生 现在我就模仿它做一个简单版本的.效果如下 首先需要两个时间控件,我这里用的是HTML5里面的时间控件,这个没限制喜欢用什么就用什么 ...

  9. 省市选择(基于zepto.js)

    效果如下: <div class="clList overflow-h mt75"> <select class="pull-left cl-35 se ...

  10. SQL技巧之分组求和

    这是CSDN问答里面有人提出的一道问题,题目如下. 表格如下: 得出结果如下: 求精简的SQL语句. SQL查询语句: with a as( select rank() over (partition ...