关于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自定义的漂亮单选按钮RadioButton
Nov 19 Javascript
判断文档离浏览器顶部的距离的方法
Jan 08 Javascript
jQuery 删除/替换DOM元素的几种方式
May 20 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
JS实现网站菜单拖拽移位效果的方法
Sep 24 Javascript
学习AngularJs:Directive指令用法(完整版)
Apr 26 Javascript
Vue.js开发环境搭建
Nov 10 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
Aug 13 Javascript
vue+vue-router转场动画的实例代码
Sep 01 Javascript
15个顶级开源JavaScript框架和库
Oct 10 Javascript
移动端吸顶fixbar的解决方案详解
Jul 17 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
MySQL授权问题总结
2007/05/06 PHP
php empty函数判断mysql表单是否为空
2010/04/12 PHP
php发送post请求函数分享
2014/03/06 PHP
PHP中的类型约束介绍
2015/05/11 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
超级退弹代码
2008/07/07 Javascript
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
举例讲解Python中装饰器的用法
2015/04/27 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python中while和for的区别总结
2019/06/28 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
中国文明网签名寄语
2014/01/18 职场文书
小学国庆节活动方案
2014/02/11 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
明星邀请函
2015/02/02 职场文书
储备店长岗位职责
2015/04/14 职场文书
大学生创业计划书
2019/06/24 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js