关于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 相关文章推荐
javascript 写类方式之五
Jul 05 Javascript
javascript中不等于的代码是什么怎么写
Dec 29 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
Apr 11 Javascript
JS实现点击上移下移LI行数据的方法
Aug 05 Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 Javascript
微信小程序 网络API发起请求详解
Nov 09 Javascript
详解微信小程序 template添加绑定事件
Jun 23 Javascript
JavaScript创建对象的常用方式总结
Aug 10 Javascript
微信小程序如何调用json数据接口并解析
Jun 29 Javascript
jQuery实现消息弹出框效果
Dec 10 jQuery
vue 动态添加class,三个以上的条件做判断方式
Nov 02 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
smarty半小时快速上手入门教程
2014/10/27 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
理解JavaScript原型链
2016/10/25 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
opencv实现图像几何变换
2021/03/24 Python
计算机开发个人求职信范文
2013/09/26 职场文书
文明班级建设方案
2014/05/15 职场文书
团结演讲稿范文
2014/05/23 职场文书
某某同志考察材料
2014/05/28 职场文书
感恩教育月活动总结
2014/07/07 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
个人工作表现自我评价
2015/03/06 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
高考升学宴主持词
2019/06/21 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL