关于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 相关文章推荐
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
jQuery实现ctrl+enter(回车)提交表单
Oct 19 Javascript
开启Javascript中apply、call、bind的用法之旅模式
Oct 28 Javascript
轻松实现js图片预览功能
Jan 18 Javascript
BootStrap Typeahead自动补全插件实例代码
Aug 10 Javascript
通过AngularJS实现图片上传及缩略图展示示例
Jan 03 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 Javascript
VUE element-ui 写个复用Table组件的示例代码
Nov 18 Javascript
vue路由传参页面刷新参数丢失问题解决方案
Oct 08 Javascript
mpvue微信小程序开发之实现一个弹幕评论
Nov 24 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
Email+URL的判断和自动转换函数
2006/10/09 PHP
PHP中的正规表达式(二)
2006/10/09 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
浅谈PHP的反射API
2017/02/26 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
JS实现的省份级联实例代码
2013/06/24 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
express框架下使用session的方法
2019/07/31 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
js仿360开机效果
2019/12/26 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
简单实现Python爬取网络图片
2018/04/01 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
由面试题加深对Django的认识理解
2019/07/19 Python
python如何随机生成高强度密码
2020/08/19 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
英国最大的百货公司:Harrods
2016/08/18 全球购物
中国最大的名表商城:万表网
2016/08/29 全球购物
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
六道php面试题附答案
2014/06/05 面试题
SQL数据库笔试题
2016/03/08 面试题
介绍一下MD5加密算法
2016/11/12 面试题
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
干部作风建设心得体会
2014/10/22 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript