插件介绍

首先我们来看插件的功能演示(效果):

插件准备好后。前台只需编写html:

<input type="text" class="deptName" />

然后在javascript中渲染插件(代码使用jQuery写法):

$(".deptName").ztreeDeptSelect();

插件即渲染完成。

此插件已发布至github,源码地址: https://github.com/harveyhang/ztreeDeptSelect

需要的朋友,请直接从github下载源码。

后台请求数据使用ASP.NET完成,基于.NET Framework4.0。插件将会不断的完善中,第一次分享代码至github,希望园友们支持~

使用详解

1.修改代码获取部门数据来源,即重新组织DeptDialogDataHandler.ashx的代码。源代码中,.ashx只是示例,是静态数据,是假定查询结果返回的数据;

通常情况下部门数据来自数据库,所以请根据实际项目来更改获取部门数据的代码。

2.部门树依赖于zTree(一款部门树插件),插件依赖于jQuery。所以请确保项目中有jquery和zTree的文件。具体请参考demo文件夹下的index.html文件和

src文件夹下的deptDialog.html文件。

3.目前插件提供三种使用方法:简单调用,设置默认值,设置参数 ;三种使用方法在demo\index.html都有说明。

部门数据的来源

加载部门树的前台代码:

$(document).ready(function () {
var zNodes;
//assign root data to zNodes.
$.ajax({
url: 'DeptDialogDataHandler.ashx',
type: 'post',
dataType: 'json',
async: false,
data: { 'ajaxMethod': 'GetRootData' },
success: function (data) {
zNodes = data;
}
}); //tree setting
var setting = {
async: {
enable: true,
url: "DeptDialogDataHandler.ashx",
autoParam: ["id"], // Parameters of the parent node attribute that is automatically committed when the asynchronous load is loaded
otherParam: ["ajaxMethod", 'AsyncCurrentNodeChildren'], //ajax request parameters
type: 'post',
dataType: 'json'
},
view: {
showIcon: true,
dblClickExpand: false
},
showLine: true, // show ztree connect line
data: { //Using pId to identify the relationship between father and son
simpleData: {
enable: true
}
},
callback: { //callback function.
onDblClick: zTreeOnDblClick,
asyncSuccess: zTreeOnAsyncSuccess
}
};
//init ztree.
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
});

handler文件的后台代码:

<%@ WebHandler Language="C#" Class="DeptDialogDataHandler" %>

using System;
using System.Web;
using Newtonsoft.Json; /// <summary>
/// Ajax Data Handler.
/// Author: https://github.com/harveyhang
/// Tips:Modify code to apply your own business...
/// </summary>
public class DeptDialogDataHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
//static data for test,this is the depts data...
var depts = new[]{
new {deptId = , deptName = "All Depts", parentDeptId = - },
new {deptId = , deptName = "Technology Dept", parentDeptId = },
new {deptId = , deptName = "Software Dept", parentDeptId = },
new {deptId = , deptName = "Hardware Dept", parentDeptId = },
new {deptId = , deptName = "Human Resource Dept", parentDeptId = }
};
//convert data type to ztree
//... convert process is omitted
/**
* data convert instruction:
* the previous code section has three common properties:deptId,deptName,parentDeptId ,
* which was converted to these properties under: id ,name ,pId
* if department node has child,set isParent=true;else,set isParent=false;
**/
var zTreeDepts = new[] {
new {id = , name = "All Depts", pId = -, isParent=true },
new {id = , name = "Technology Dept", pId = , isParent=true },
new {id = , name = "Software Dept", pId = , isParent=false },
new {id = , name = "Hardware Dept", pId = , isParent=false },
new {id = , name = "Human Resource Dept", pId = , isParent=false }
}; try
{
string ajaxMethod = context.Request["ajaxMethod"].ToString();//get ajax method
System.Reflection.MethodInfo method = this.GetType().GetMethod(ajaxMethod);
if (method != null)
method.Invoke(this, new object[] { context });//execute method
}
catch (Exception)
{
throw;
}
finally
{
context.Response.End();
}
} /// <summary>
/// async load children
/// </summary>
/// <param name="context"></param>
public void AsyncCurrentNodeChildren(HttpContext context)
{
try
{
int id = int.Parse(context.Request.Params["id"]);
var childrenData = new[] {
new {id = , name = "Technology Dept", pId = , isParent=true },
new {id = , name = "Human Resource Dept", pId = , isParent=false }
};
switch(id)
{//suppose the data was getted
case :
break;
case :
childrenData = new[] {
new {id = , name = "Software Dept", pId = , isParent=false },
new {id = , name = "Hardware Dept", pId = , isParent=false }
};
break;
case :
case :
case :
childrenData = null;
break;
}
context.Response.Write(JsonConvert.SerializeObject(childrenData));
}
catch (Exception)
{
throw;
}
} /// <summary>
/// root data
/// </summary>
/// <param name="context"></param>
public void GetRootData(HttpContext context)
{
try
{
//suppose the data was getted
var root = new { id = , name = "All Depts", pId = -, isParent = true };
context.Response.Write(JsonConvert.SerializeObject(root));
}
catch (Exception)
{
throw;
}
} public bool IsReusable
{
get
{
return false;
}
} }

此部分可以改为其它网页语言,如php,java等。因为插件是前台通用的 ,后台数据可以根据实际需要定制。

总结

目前此插件尚有一个未修复的bug:“用Google Chrome浏览器时,部门窗口无法弹出”。因Chrome已阻止了js的showModalDialog方法。

IE或火狐等主流浏览器尚未发现有bug。当然,欢迎广大园友批评指正。

由于是上github的项目,代码注释全部为本人"手写"的英文。本人英语水平一般,这蹩脚的英语,,,还望诸位见谅~

如果各位觉得github上的英文描述不清晰,或者您对此插件有任何建议,欢迎留言一起交流~

最后,

希望本文对你有帮助。

ztreeDeptSelect 基于jquery和ztree的部门选择插件的更多相关文章

  1. 基于jQuery美化联动下拉选择框

    今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...

  2. 基于jQuery仿去哪儿城市选择代码

    基于jQuery仿去哪儿城市选择代码.这是一款使用的jQuery城市选择特效代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="lin ...

  3. 基于jquery的bootstrap在线文本编辑器插件Summernote

    Summernote是一个基于jquery的bootstrap超级简单WYSIWYG在线编辑器.Summernote非常的轻量级,大小只有30KB,支持Safari,Chrome,Firefox.Op ...

  4. 基于jQuery点击图像居中放大插件Zoom

    分享一款基于jQuery点击图像居中放大插件Zoom是一款放大的时候会从原图像的位置以动画方式放大到画面中间,支持点击图像或者按ESC键来关闭效果.效果图如下: 在线预览   源码下载 实现的代码. ...

  5. 基于jQuery select下拉框美化插件

    分享一款基于jQuery select下拉框美化插件.该插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览   源码下 ...

  6. jQuery补充,基于jQuery的bxslider轮播器插件

    基于jQuery的bxslider轮播器插件 html <!DOCTYPE html> <html lang="zh-cn"> <head> & ...

  7. 基于jQuery简单实用的Tabs选项卡插件

    jQuery庞大的插件库总是让人欢喜让人忧,如何从庞大的插件库里挑出适合自己的插件,总是让很多缺少经验的朋友头疼的事!今天为大家推荐几款简单实用的Tabs选项卡插件,推荐理由:简单易用灵活,样式美观, ...

  8. 一款基于jQuery的热点新闻Tab选项卡插件

    今天要分享的jQuery焦点图插件非常适合展示热点新闻,之前我们分享过好多基于jQuery的焦点图插件,效果都还很不错.它可以在图片上方展示文字标题,并且焦点图的切换按钮时tab风格的,图片切换也十分 ...

  9. 基于jquery的bootstrap在线文本编辑器插件Summernote (转)

    Summernote是一个基于jquery的bootstrap超级简单WYSIWYG在线编辑器.Summernote非常的轻量级,大小只有30KB,支持Safari,Chrome,Firefox.Op ...

随机推荐

  1. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

  2. myeclipse学习总结一(在MyEclipse中设置生成jsp页面时默认编码为utf-8编码)

    1.每次我们在MyEclispe中创建Jsp页面,生成的Jsp页面的默认编码是"ISO-8859-1".在这种情况下,当我们在页面中编写的内容存在中文的时候,就无法进行保存.如下图 ...

  3. MVC5+EF6+MYSQl,使用codeFirst的数据迁移

    之前本人在用MVC4+EF5+MYSQL搭建自己的博客.地址:www.seesharply.com;遇到一个问题,就是采用ef的codefirst模式来编写程序,我们一般会在程序开发初期直接在glob ...

  4. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  5. MySQL中interactive_timeout和wait_timeout的区别

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR (HY000): Lost connection to MySQL server ...

  6. [EasyUI美化换肤]更换EasyUi图标

    前言 本篇文章主要是记录一些换EasyUI皮肤的过程,备忘.也欢迎美工大神各路UI给点好意见,EasyUI我就不介绍了,自行百度吧..(So..所以别问我是不是响应式..本身EasyUI就不是响应式. ...

  7. wordpress优化之结合prism.js为编辑器自定义按钮转化代码

    原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...

  8. input type='file'上传控件假样式

    采用bootstrap框架样式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...

  9. ObserverPattern(观察者模式)

    import java.util.ArrayList; import java.util.List; /** * 观察者模式 * @author TMAC-J * 牵一发而动全身来形容观察者模式在合适 ...

  10. JQuery的基础和应用

    <参考文档>   1.什么是?    DOM的作用:提供了一种动态的操作HTML元素的方法.    jQuery是一个优秀的js库.用来操作HTML元素的工具.    jQuery和DOM ...