jQuery EasyUI 树形菜单 – 创建带复选框的树形菜单(长文讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言:为什么选择 jQuery EasyUI 树形菜单?
在 Web 开发中,树形菜单(Tree Menu)是一种常见的交互组件,它能够将复杂的层级数据以直观的方式呈现给用户。而当树形菜单结合复选框功能时,便能实现多选、父子节点联动等高级操作,广泛应用于权限管理、配置选项、分类筛选等场景。jQuery EasyUI 作为一款成熟的前端 UI 框架,提供了高度封装的树形菜单组件,开发者仅需少量代码即可快速实现功能。本文将手把手教你如何通过 EasyUI 创建带复选框的树形菜单,适合编程初学者快速入门,也适合中级开发者深入掌握细节。
环境准备:搭建开发环境
在开始前,请确保已完成以下准备工作:
-
引入 EasyUI 资源:需在 HTML 文件中引入 jQuery、EasyUI 的 CSS 和 JS 文件。代码示例如下:
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/default/easyui.css"> <link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/icon.css"> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
-
HTML 结构:创建一个容器元素,用于承载树形菜单:
<div id="tree" class="easyui-tree" style="width:300px;"></div>
基础树形菜单的创建:从零开始构建
核心配置参数解析
EasyUI 树形菜单通过 easyui-tree
类初始化,核心配置参数如下表:
参数名 | 作用描述 | 示例值 |
---|---|---|
data | 直接指定本地数据源(JSON 格式) | [...] |
url | 指定远程数据源的接口地址 | "data/tree.json" |
method | 请求方式(GET/POST) | "POST" |
animate | 是否启用折叠动画效果 | true |
checkbox | 是否显示复选框 | true |
比喻说明:将树形菜单想象成一棵真实的树,每个节点(Node)都有父节点(Parent)和子节点(Children)。
data
参数就像树的种子,决定了树的生长形态。
第一个树形菜单实例
<div id="tree" class="easyui-tree" data-options="url:'data/tree.json', method:'get', checkbox:true"></div>
注意:
data-options
属性用于传入初始化配置,url
需指向符合 EasyUI 格式的 JSON 数据。
复选框功能详解:实现父子联动
父子节点联动原理
复选框的核心逻辑是“父节点与子节点状态同步”。例如:
- 全选:父节点选中时,所有子节点自动选中。
- 半选:部分子节点选中时,父节点显示为半选状态。
- 全不选:父节点和所有子节点均未选中。
比喻说明:想象一个家庭树,如果家长(父节点)勾选“全家出游”,那么所有孩子(子节点)的“是否参与”选项会自动跟随,这就是父子联动的直观体现。
数据格式要求
复选框功能需要在节点数据中添加 checked
属性,示例如下:
[
{
"id": 1,
"text": "水果",
"state": "closed", // 或 "open"
"children": [
{"id": 11, "text": "苹果", "checked": false},
{"id": 12, "text": "香蕉", "checked": true}
]
}
]
数据加载方式:本地与远程数据源
本地数据加载
直接在 HTML 中通过 data
参数传递数据:
$("#tree").tree({
data: [
{
text: "电子产品",
children: [
{text: "手机", checked: false},
{text: "笔记本", checked: true}
]
}
],
checkbox: true
});
远程数据加载
通过 url
参数请求接口,示例代码如下:
$("#tree").tree({
url: "/api/get-tree-data",
method: "post",
checkbox: true,
onLoadSuccess: function() {
console.log("数据加载完成");
}
});
事件处理:响应用户交互
常用事件类型
事件名 | 触发场景 | 回调参数 |
---|---|---|
onClick | 节点被点击时 | node |
onCheck | 复选框状态改变时 | node, checked |
onExpand | 节点展开时 | node |
onCollapse | 节点折叠时 | node |
复选框事件监听示例
$("#tree").tree({
checkbox: true,
onCheck: function(node, checked) {
console.log("节点ID:" + node.id);
console.log("是否选中:" + checked);
// 自定义逻辑:如同步到后端
}
});
扩展功能:实现级联选择
父子节点状态同步
通过 cascadeCheck
属性(需 EasyUI 1.7+ 版本)实现自动联动:
$("#tree").tree({
checkbox: true,
cascadeCheck: true
});
手动实现联动逻辑(兼容旧版本)
$("#tree").tree({
checkbox: true,
onCheck: function(node, checked) {
// 选中父节点时,递归选中所有子节点
if (checked) {
$("#tree").tree("check", node.id);
var children = $("#tree").tree("getChildren", node.target);
$.each(children, function() {
$("#tree").tree("check", this.id);
});
}
}
});
常见问题与解决方案
问题1:复选框未显示
可能原因:未正确配置 checkbox: true
,或数据中缺少 checked
字段。
解决方法:检查初始化配置和数据格式。
问题2:数据加载失败
可能原因:接口返回的数据格式不符合 EasyUI 要求。
解决方法:确保 JSON 数据包含 text
、id
字段,子节点需用 children
数组。
问题3:父子联动失效
可能原因:未启用 cascadeCheck
或自定义逻辑错误。
解决方法:检查版本兼容性或手动实现递归逻辑。
结论:树形菜单的实战应用场景
通过本文,你已掌握如何使用 jQuery EasyUI 快速构建带复选框的树形菜单。该技术在以下场景中具有显著优势:
- 权限管理:在用户角色配置中,通过勾选菜单节点分配权限。
- 分类筛选:电商平台的多级商品分类筛选功能。
- 配置中心:系统设置界面中,通过树形结构管理复杂的配置项。
建议读者通过以下步骤深化理解:
- 在本地环境复现本文示例。
- 尝试扩展功能,如添加右键菜单、异步加载子节点。
- 结合后端技术(如 RESTful API)实现数据持久化。
掌握树形菜单的复选框功能,将为你的前端开发技能锦上添花,助力应对复杂项目的挑战。