关于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 学习6 操纵元素显示效果的函数
Feb 07 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
Feb 16 Javascript
判断一个对象是否为jquery对象的方法
Mar 12 Javascript
javascript实现网站加入收藏功能
Dec 16 Javascript
vue.js表格组件开发的实例详解
Oct 12 Javascript
JS冒泡事件与事件捕获实例详解
Nov 25 Javascript
TypeScript入门-基本数据类型
Mar 28 Javascript
详解webpack+express多页站点开发
Dec 22 Javascript
详解react阻止无效重渲染的多种方式
Dec 11 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
Feb 13 Javascript
vue-devtools的安装和使用步骤详解
Oct 17 Javascript
聊聊JS ES6中的解构
Apr 29 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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
简单实现jQuery手风琴效果
2017/08/18 jQuery
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
JavaScript类的继承操作实例总结
2018/12/20 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
python删除字符串中指定字符的方法
2018/08/13 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
商务会议邀请函
2014/01/09 职场文书
团日活动总结报告
2014/06/25 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
挂靠协议书
2015/01/27 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书