关于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实现程序暂停与继续功能代码解读
Oct 10 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 Javascript
javascript实现获取字符串hash值
May 10 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
Dec 30 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
JavaScript编写的网页小游戏,很给力
Aug 18 Javascript
简单的网页广告特效实例
Aug 19 Javascript
vue2.0 常用的 UI 库实例讲解
Dec 12 Javascript
vue组件tabbar使用方法详解
Nov 06 Javascript
express express-session的使用小结
Dec 12 Javascript
js blob类型url的视频下载问题的解决
Nov 29 Javascript
在Vue中使用mockjs代码实例
Nov 25 Vue.js
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中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
php中的异常和错误浅析
2017/05/03 PHP
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
实例浅析js的this
2016/12/11 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
python修改list中所有元素类型的三种方法
2018/04/09 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
Python代码太长换行的实现
2019/07/05 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
如何提高MySql的安全性
2014/06/19 面试题
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
大学生应聘求职信
2014/05/26 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
倡议书的写法
2014/08/30 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
邀请书格式范文
2015/02/02 职场文书