关于jquery动态增减控件的一些想法和小插件


Posted in Javascript onAugust 01, 2010

去年做项目时遇到一个模块,需要能够动态的增减控件。当初第一个解决方案是用UpdatePanel做页面的局部更新。由于页面很大,而且控件非常多,当动态增加的控件非常多的时候,会变得很慢。后来就想着用javascript做动态的增减控件,最后在提交页面的时候搜集页面控件的数据,效果很棒,但是由于当时仅仅是为那一个模块做,所以扩展性很差,而且那时写javascript代码非常复杂,仅仅为了动态增减的效果,就写超过了500行javascript代码。

后来去年末时间空闲下来的时候重写了这段代码,现在这段代码压缩到100行内,而且扩展方便,可以非常轻松的增减控件的数量,使用非常简单。

效果图:
关于jquery动态增减控件的一些想法和小插件
一个简单的例子:

<?xml version="1.0" encoding="iso-8859-1"?> 
<html> 
<head> 
<title></title> 
<script language="javascript" src="jquery-1.4.2.min.js"></script> 
<script language="javascript" src="dynamicAddRemover.js"></script> 
<script language="javascript"> 
$(function(){ 
$("table").dynamicAddRemover(); 
}); 
</script> 
</head> 
<body> 
<table> 
<tr> 
<td> 
<select> 
<option value ="volvo">Volvo</option> 
<option value ="saab">Saab</option> 
<option value="opel">Opel</option> 
<option value="audi">Audi</option> 
</select> 
<input type="text" name="text1" id="text1" value="Text"></input> 
<button type="button" name="btn1" value="btn1" id="btn1" >Button</button> 
</td> 
</tr> 
</table> 
</body> 
</html>

加了限制个数事件后的例子:
<?xml version="1.0" encoding="iso-8859-1"?> 
<html> 
<head> 
<title></title> 
<script language="javascript" src="jquery-1.4.2.min.js"></script> 
<script language="javascript" src="dynamicAddRemover.js"></script> 
<script language="javascript"> $(function(){ 
$("#table1").dynamicAddRemover({ 
addedEvent:function(newCtl, options){ 
//clear the textbox. 
newCtl.find(":text").val(''); 
if($("table").size() > 5) 
{ 
//hide the add button. 
newCtl.find("img[id$='" + options.adderId + "']").hide(); 
} 
}, 
removedEvent:function(prevCtl, nextCtl, options){ 
if($("table").size() <= 5) 
{ 
//show the add button. 
$("table:last").find("img[id$='" + options.adderId + "']").show(); 
} 
} 
}); 
}); 
</script> 
</head> 
<body> 
<table id='table1'> 
<tr> 
<td> 
<select> 
<option value ="volvo">Volvo</option> 
<option value ="saab">Saab</option> 
<option value="opel">Opel</option> 
<option value="audi">Audi</option> 
</select> 
<input type="text" name="text1" id="text1" value="Text"></input> 
<button type="button" name="btn1" value="btn1" id="btn1" >Button</button> 
</td> 
</tr> 
</table> 
</body> 
</html>

参数的定义:
rootWrapper default: "table" 
根容器,就是需要增减的控件的根容器,目前代码上仅仅支持table根容器。 
adderId default:"imgExpBtn" 
增加按钮的Id。 
removerId default:"imgColBtn" 
删除按钮的Id。 
addingEvent default:null 
在增加事件之前所触发的自定义事件,参数为newWrapper和options, newWrapper为新增的控件的父容器,options为参数列表自己。 
addedEvent default:null 
在增加事件之后所触发的自定义事件,参数为newWrapper和options, newWrapper为新增的控件的父容器,options为参数列表自己。 
removingEvent default:null 
在删除事件之前所触发的自定义事件,参数为refWrapper和options, reWrapper为被删除的控件的父容器,options为参数列表自己。 
removedEvent default:null 
在删除事件之后所触发的自定义事件,参数为prevWrapper,nextWrapper和options, prevWrapper为被删除的父容器的上一个容器,nextWrapper为被删除的父容器的下一个容器,,options为参数列表自己。 
collapseImgUrl default:'icon_collapse.gif' 
增加按钮的路径 
expandImgUrl default:'icon_expand.gif' 
删除按钮的路径

注意事项:
.可以添加在增减过程中需要的自定义参数和变量,如: $("table").dynamicAddRemover({param1:"param1", param2:"param2"});
使用时,如:options.param1等等。
.根容器必须有唯一Id且指定时必须唯一。如果有多个模块(多个根容器)需要使用可以这样:$("#table1").dynamicAddRemover(),$("#table2").dynamicAddRemover()等等。
.新添加的控件里的Id和name并没有更新,如果有特别业务需要,请在addedEvent里添加生成新Id的业务逻辑。
.本插件需要Jquery 1.2.6版本以上支持。

源代码和原理很简单,仅仅作为一个抛砖引玉的作用。以下是包括源代码的附件。
dynamicAddRemover.rar

Javascript 相关文章推荐
JS模拟多线程
Feb 07 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
Apr 25 Javascript
深入理解Javascript中this的作用域
Aug 12 Javascript
浅析Node.js 中 Stream API 的使用
Oct 23 Javascript
jQuery解析json格式数据简单实例
Jan 22 Javascript
JS中BOM相关知识点总结(必看篇)
Nov 22 Javascript
利用Javascript实现简单的转盘抽奖
Feb 13 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
Jul 24 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
Dec 17 Javascript
微信小程序云函数添加数据到数据库的方法
Mar 04 Javascript
JavaScript实现电灯开关小案例
Mar 30 Javascript
Openlayers测量距离与面积的实现方法
Sep 25 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
Aug 01 #Javascript
jQuery的实现原理的模拟代码 -1 核心部分
Aug 01 #Javascript
jQuery validate 中文API 附validate.js中文api手册
Jul 31 #Javascript
jQuery对象[0]是什么含义?
Jul 31 #Javascript
动态调用CSS文件的JS代码
Jul 29 #Javascript
date.parse在IE和FF中的区别
Jul 29 #Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 #Javascript
You might like
php实现读取超大文件的方法
2014/07/28 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
Javascript创建类和对象详解
2017/05/31 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错
2018/11/06 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
Python pycharm 同时加载多个项目的方法
2019/01/17 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
python中append函数用法讲解
2020/12/11 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
毕业生在校学习的自我评价分享
2013/10/08 职场文书
师范应届生语文教师求职信
2013/10/29 职场文书
建筑工程管理专业自荐信范文
2013/12/28 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
业务总经理岗位职责
2014/02/03 职场文书
销售2014年度工作总结
2014/12/08 职场文书
计划生育工作总结2015
2015/04/03 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
mysql主从复制的实现步骤
2021/10/24 MySQL