前言:之前写了一篇dwz的树形下拉框组件,只能满足单页面的使用,但是面对实际应用时,以上应用暂时不能满足,于是乎又重新对树形菜单进行改造。
然后先说一下思路,本思路有很大弊端,也希望有看到的大牛有好的办法时,请多多指教。
思路:页面上通过一个input标签进行value值和title值的动态设定
<span class="combo"> <input type="text" id="memlistserial" name="proxyserial" class="combotree" value="${vo.mo.proxyserial}" title="${proxyName}"> </span>
value向controller传递值,以便通过以下值进行获取
String proxyserial = request.getParameter("proxyserial"); condition.setProxyserial(proxyserial);
title值为方便页面显示,eg.title为交易所总代理,value为""字符串,通过controller的以下方法对前台显示内容进行控制
model.addAttribute("proxyName", this.proxysMapper.selectByProxyserial(currentProxyserial).getUsername());
然后,需要在combotree.js中对该input标签进行定制,见如下代码
/** * @author maweiqing * @version 1.0 */ (function($) { $.extend($.fn, { combotree : function() { // 获取树形菜单内容 loadProxysInfo(false, null); return this.each(function(i) { // 输入文本框 var $this = $(this); // 文本框的ID值 var cid = $this.attr("id") || Math.round(Math.random() * 10000000); // 定制的title值 var name = $this.attr("title"); // 定制下拉框 var combo = '<span class="combo-text" id="comboText_' + cid + '" style="float:left;display:block;width:' + $this.width() + 'px">' + name + '</span>' + '<span onclick="showMenu($(this).prev());" class="combo-arrow" style="float:left" title="显示"></span>' + '<span onclick="loadProxysInfo(true, ' + cid + ');" class="combo-reload" style="float:left" title="重新加载"></span>'; $this.before(combo); $this.hide(); }); } }); })(jQuery); // 树形下拉框的节点数组 var proxyTreeData = []; /** * 隐藏菜单 */ function hideMenu($menuContent) { $menuContent.fadeOut("fast"); $("body").unbind("mousedown", { cid : $menuContent.attr("id") }, onBodyDown); $menuContent.remove(); } /** * 为当前节点添加下级节点 * * @param records * @param cnode */ function addNextNode(records, cnode) { cnode["children"] = new Array(); cnode["open"] = true; $(records).each( function(index, value) { // 如果当前代理的级别=len,且以pre开头的,则添加到上一级 if ((value.proxyserial.length / 4 == cnode.id.length / 4 + 1) && (value.proxyserial.substring(0, cnode.id.length) == cnode.id)) { var subNode = {}; subNode["name"] = value.proxysName; subNode["id"] = value.proxyserial; cnode["children"].push(subNode); addNextNode(records, subNode); } }); } /** * 打开树形结构 */ function showMenu($ctrl) { var cid = $ctrl.attr("id").substring($ctrl.attr("id").indexOf("_") + 1); var $tree = $('<ul class="ztree" id="menuTree_' + cid + '"></ul>'); // 对tree进行赋值 $.fn.zTree.init($tree, setting, proxyTreeData); // 定制树形菜单 var $menuContent = $('<div id="menuContent_' + cid + '" style="position: absolute;display: none;"></div>'); $menuContent.append($tree); // 添加到body中 $("body").append($menuContent); // 获取当前文本框的值,对树形菜单进行选中状态的赋值 var treeObj = $.fn.zTree.getZTreeObj($tree.attr("id")); treeObj.selectNode(treeObj.getNodeByParam("id", $("#" + cid).val(), null)); var offset1 = $ctrl.offset(); // 计算树形菜单位置 $menuContent.css({ width : $ctrl.width() + $ctrl.next().width() * 2, left : offset1.left + "px", top : offset1.top + $ctrl.outerHeight() + "px" }).slideDown("fast"); // 绑定鼠标左键点击事件 $("body").bind("mousedown", { cid : $menuContent.attr("id") }, onBodyDown); } /** * 点击树形结构以外时,关闭树形下拉框 * * @param event */ function onBodyDown(event) { if (!(event.target.id == "menuBtn" || event.target.id == event.data.cid || $(event.target).parents("#" + event.data.cid).length > 0)) { hideMenu($('#' + event.data.cid)); } } /** * 取得代理列表. */ function loadProxysInfo(flag, cid) { // 手动加载 if (flag) { // 重新获取数据 proxyTreeData = []; ajaxProxys(); // 显示内容 $("#comboText_" + $(cid).attr("id")).html(proxyTreeData[0].name); // 输入框赋值 $(cid).attr({ value : proxyTreeData[0].id, title : proxyTreeData[0].name }); // 树形菜单重新赋值 var $menuTree = $("#menuTree_" + $(cid).attr("id")); // 对tree进行赋值 $.fn.zTree.init($menuTree, setting, proxyTreeData); } else { // 如果数据没有初始化,那么需要重新获取代理树形结构 if (proxyTreeData.length == 0) { ajaxProxys(); } } }; /** * 请求后台,获取当前登录用户的树形结构菜单内容 */ function ajaxProxys() { $.ajax({ url : common.ctx + "/member/loadProxysInfo.do",// 请求的URL async : false, dataType : 'json', success : function(records) { // 代理表中有代理 if (records != null && records.length > 0) { // 取出root节点 var nodes = records.slice(1); var root = records[0]; // 根节点 var rootNode = {}; // 从根节点开始 rootNode["name"] = root.proxysName; rootNode["id"] = root.proxyserial; rootNode["open"] = true; rootNode["children"] = new Array(); // 根节点有子节点 if (nodes != null && nodes.length > 0) { // 设定当前代理的下级代理级别,假如当前代理为2级,那么2级的下级为3级 var start = 1; if (root.proxyserial != null) { start = root.proxyserial.length / 4 + 1; } // 遍历子节点 $.each(nodes, function(index, value) { if (value.proxyserial.length / 4 == start) { var subNode = {}; subNode["name"] = value.proxysName; subNode["id"] = value.proxyserial; rootNode["children"].push(subNode); addNextNode(records, subNode); } }); } proxyTreeData.push(rootNode); } } }); }; // 设置ztree属性 var setting = { view : { dblClickExpand : false }, data : { simpleData : { enable : true } }, callback : { onClick : nodeClick }, view : { selectedMulti : false, // showLine : false, showIcon : false } }; /** * 点击菜单,对当前输入框的前span进行name的赋值,对当前输入框进行代理序列号的赋值 * * @param e * @param treeId * @param treeNode */ function nodeClick(e, treeId, treeNode) { // 传递唯一标识 var serial = treeId.substring(treeId.indexOf("_") + 1); // 通过treeId找到对应的文本框和显示名称 $("#comboText_" + serial).html(treeNode.name); $("#" + serial).attr({ value : treeNode.id, title : treeNode.name }); // 隐藏当前树形菜单 hideMenu($('#menuContent_' + serial)); };
以上,主要有几点进行控制,首先为每个input标签定制显示的span,点击的向下箭头,重新加载的span,还有ztree组件,当页面中有需要加载树形下拉框的时候,会进入到combotree : function(),该方法需要获取树形菜单数据,然后指定显示的文本,当打开树形菜单的时候,通过id之间的协定进行获取对应的jquery对象,该处需要进行优化,然后设置树形菜单的当前选中项,并且指定显示位置。
通过以上办法,虽然解决了当前所需,但是总觉得不是很好。
相关推荐
标题“为dwz扩展树形下拉框”指的是在DWZ(Dynamic Web Zone)框架中对树形下拉框功能的扩展。DWZ是一个基于jQuery的前端开发框架,主要用于构建富交互式的Web应用。这个扩展可能涉及到在原有的DWZ组件基础上增加或...
在IT行业中,"dwz 下拉框左右选择"通常指的是一个特定的UI组件,它用于在Web应用中实现用户交互。DWZ(Dynamic Web Zone)是一个开源的JavaScript框架,专门用于构建富客户端的Web应用程序。这个框架提供了丰富的UI...
DWZ框架囊括了一系列丰富的组件,涵盖导航、表格、对话框、树形结构等,旨在满足多样化的Web应用需求: - **NavTab**:用于实现多标签页浏览,便于用户在不同页面间快速切换。 - **Accordion**:可折叠面板组件,...
1. **组件丰富**:DWZ包含了多种常见的Web组件,如表格、表单、对话框、菜单、按钮、树形结构、日历等,这些组件设计简洁,易于使用,并且与jQuery的API紧密结合,可以灵活定制和扩展。 2. **页面布局**:框架提供...
DWZ框架对HTML表单进行了封装,支持Ajax提交、自动验证和表单重载等功能。它提供了便捷的表单操作API,使得表单的创建和处理变得更加简单。 3. **Ajax交互**: DWZ的核心是基于jQuery的Ajax实现,它简化了Ajax...
2. **UI组件**:框架内集成了丰富的UI组件,如按钮、表格、表单、弹窗、提示、树形菜单、下拉选择器等,这些组件都进行了优化,易于使用且兼容性良好。 3. **AJAX交互**:DWZ支持AJAX无刷新操作,通过封装的API可以...
5. **Ajax操作**:DWZ对Ajax进行了封装,简化了异步请求的处理,使得前后端通信更加便捷。 6. **提示信息**:如加载提示、错误提示等,提高了用户体验。 7. **布局管理**:DWZ提供了流式、响应式等多种布局模式,...
"demo"指的是演示或示例,"dwz_php"和"php_dwz"暗示了该框架与PHP的结合,"dwz-demo"是对压缩包内容的再次确认,而"dwz-ria"可能是指dwz框架在Rich Internet Application(RIA,富互联网应用)场景中的应用。...
随着对DWZ的深入理解,你还可以探索其高级特性,如AJAX上传、拖放操作、树形结构等,进一步提升你的Web开发技能。 总的来说,DWZ框架为Web开发者提供了一个高效、易用的工具集,能够快速构建功能丰富的交互式Web...
DWZ包括表格、下拉框、按钮、对话框等常用UI元素,使得Web应用具有良好的用户体验。在本项目中,DWZ版本为1.5.3,可以与SpringMVC和MyBatis后端完美融合,实现前后端的交互。 整合这三个框架的过程通常包括以下几个...
DWZ(Dynamic Web ZUI)框架是一款基于Ajax技术的开源JavaScript前端框架,主要应用于Web应用程序的用户界面设计,尤其在富互联网应用(RIA,Rich Internet Applications)开发中表现出色。DWZ框架以其强大的功能、...
在使用DWZ框架时,开发者需要了解如何初始化框架,如何通过JavaScript对页面元素进行操作,以及如何与后端进行数据交互。DWZ提供了详细的API文档和示例代码,供开发者快速上手。 关于DWZ框架的js库,它主要包括了多...
通过这些Demo,你可以直观地了解如何使用DWZ的导航栏、表单、对话框、分页、树形结构等组件。每个示例都配有详细的注释,解释了实现特定功能的关键代码,这对于初学者来说非常有帮助。同时,你可以直接在浏览器中...
2. **组件库**:DWZ UI提供了许多预封装的组件,如表格、表单、对话框、按钮、下拉菜单、树形结构、时间选择器等,这些组件大大简化了前端开发。 3. **AJAX集成**:DWZ UI支持Ajax无刷新交互,可以方便地实现异步...
标题 "dwz中的全国省市的查找带回" 涉及的是一个使用DWZ(Dynamic Web Zone)框架实现的中国省市联动下拉选择的功能。DWZ是一个国内常用的前端UI框架,它提供了一系列组件和功能,方便开发者构建交互性强、用户体验...
- **dwz.tree.js**: 树形结构功能。 - **dwz.theme.js**: 主题设置功能。 - **dwz.validate.method.js**: 验证方法集合。 - **dwz.validate.zh.js**: 中文验证消息。 - **dwz.contextmenu.js**: 上下文菜单功能。 - ...
它提供了丰富的页面组件,如表格、表单、对话框、树形结构、分页、下拉菜单等,极大地简化了前端开发工作,提高了用户体验。DWZ与后端语言如PHP、Java、C#等配合使用,实现数据交互和业务逻辑处理。 在这个“C# DWZ...
标题“thinkphp3_dwz”指的是一个基于ThinkPHP 3.0框架与DWZ UI集成的项目,主要用于实现角色管理功能。在Web开发中,ThinkPHP是一个流行的PHP框架,而DWZ(Dynamic Web Zone)是一个前端jQuery UI框架,提供了一...
2. **丰富的UI组件**:框架内包含了多种常见的前端控件,如表格、表单、弹出窗口、下拉菜单、树形结构等,这些组件经过优化,易于使用且功能强大。 3. **Ajax无刷新交互**:DWZ强调页面的无刷新更新,通过Ajax技术...
它提供了丰富的UI组件,如表格、树形结构、对话框、表单验证等,使开发者能够更轻松地创建交互式的前端界面。DWZ通常与后端MVC框架结合使用,如Struts或Spring MVC,来处理业务逻辑和数据操作。 Struts是一个开源的...