`
cooleone
  • 浏览: 3092 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自己写的基于JQuery的支持ajax动态表格控件

 
阅读更多
/**
 * tabel插件
 * @author LeonYin
 * @version 0.1
*/
(function($) {
	$.fn.zytable = function(op) {
		
		if (!op.col) return;
		op = $.extend({
			dataType: 'json',
			needPaging: false,
			params: {},
			url : '',
			height: '80%',
			//默认编辑工具为INPUT
			rowCls: function(d) {return "";},
			//数据源,url参数为空时其作用
			dataSouce: [],
			perPageRow: 10
		}, op);
		
		var datas = op.dataSouce, result, paging;
		paging = new Object();
		paging.curPage = 1;
		paging.perPageRow = op.perPageRow;
		paging.needPaging = op.needPaging;
		
		var g = $(this);
		
		show();
		load();
		
		function show() {
			g.append('<table class="tableView thead" border="0" cellspacing="0" cellpadding="0"><thead></thead></table>');
			$('table.thead thead').append('<tr></tr>');
			$.each(op.col, function(i, n) {
				if (n) $('table.thead thead tr').append('<th style="width:'+n.width+'">'+n.text+'</th>');
			});
			
			g.append('<div style="height:' + op.height + ';background-color:#f4fafe;overflow-y:auto;overflow-x:hidden;widht:100%;" id="zytable_body_div"><table class="tableView tbody" border="0" cellspacing="0" cellpadding="0"><tbody></tbody></table></div>');
			
			//是否需要分页
			if (op.needPaging) {
				var pagingStr = '<span class="firstPaging">首页</span> &nbsp;<span class="backPaging">上一页</span> &nbsp;<span class="nextPaging">下一页</span> &nbsp;<span class="lastPaging">末页</span>&nbsp;共<span class="totalRow">0</span>条记录&nbsp;当前第&nbsp;<input value="1" style="width:20px" class="goto" />页/共<span class="totalPage">0</span>页 &nbsp;';
				g.append('<table class="tableView tpaging" border="0" cellspacing="0" cellpadding="0"><tr><td id="pagingTD"></td></tr></table>');
				$('#pagingTD').html(pagingStr);
				//+ '&nbsp;设置每页显示条数&nbsp;<select size="1" id="selectPerPageRow"><option value="10">10</option><option value="20">20</option><option value="30">30</option><option value="40">40</option></select>&nbsp;');
			}
		}
		
		function initDatas() {
			$('table.tbody tbody').empty();
			$.each(datas, function(i, d) {
				var id = (d.id && d.id != "") ? d.id : i;
				$('table.tbody tbody').append('<tr id="' + id + '" class="' + op.rowCls(d) + '"></tr>');
				$.each(op.col, function(j, n) {
					n = $.extend({editor: 'input'}, n);
					if (n.handle) {
						$('#' + id).append('<td style="width:'+n.width+';">' + n.handle(d, n) + '</td>');
					} else if ((typeof(n.editable) == "function" && n.editable(d) == true) || (typeof(n.editable) == "boolean" && n.editable == true)) {
						if (n.editor == 'input') {
							$('#' + id).append('<td style="width:'+n.width+';'+ (n.style? n.style : '') +'"><input name="'+n.dataIndex+'" style="width:95%;" value="'+d[n.dataIndex]+'" /></td>');
							$('input[name="'+n.dataIndex+'"]', $('#' + id)).bind('change', function() {d[n.dataIndex] = this.value;});
						} else if (n.editor == 'textarea') {
							$('#' + id).append('<td style="width:'+n.width+';'+ (n.style? n.style : '') +'"><textarea name="'+n.dataIndex+'" style="width:95%;" rows="3">'+d[n.dataIndex]+'</textarea></td>');
							$('textarea[name="'+n.dataIndex+'"]', $('#' + id)).bind('change', function() {d[n.dataIndex] = this.value;});
						}
					} else {
						$('#' + id).append('<td style="width:'+n.width+';'+ (n.style? n.style : '') +'">' + d[n.dataIndex] + '</td>');
					}
				});
			});
			
			for (var i = 0; i < paging.perPageRow - datas.length; i++) {
				var tdStr = "";
				$.each(op.col, function(j, n) {
					tdStr +='<td style="width:'+n.width+';border:0 none;">&nbsp;</td>';
				});
				$('table.tbody tbody').append('<tr>'+tdStr+'</tr>');
			}
			
			//复选框事件绑定
			$('.datacheckbox').bind('click', function() {
				if (this.id == 'datacheckall') { //全选
					if (this.checked) {
						$('.datacheckbox').attr('checked', true);
						$('.datacheckbox:disabled').attr('checked', false);
					} else {
						$('.datacheckbox').attr('checked', false);
					}
				} else { //单独选择
					var all = $('#datacheckall');
					if (!this.checked && all.attr('checked') == "checked") {
						all.attr('checked', false);
					}
				}
			});
			
			//是否需要分页
			if (op.needPaging) {
				if (paging.curPage == 1) {
					$('span.firstPaging').css({color:'#939393'});$('span.backPaging').css({color:'#939393'});
					$('span.firstPaging').unbind('click');$('span.backPaging').unbind('click');
				} else {
					$('span.firstPaging').css({color:'#000000'});$('span.backPaging').css({color:'#000000'});
					$('span.firstPaging').bind('click', function(){paging.curPage = 1;load();});$('span.backPaging').bind('click', function(){paging.curPage -= 1;load();});
				}
				
				if (paging.curPage == paging.totalPage) {
					$('span.nextPaging').css({color:'#939393'});$('span.lastPaging').css({color:'#939393'});
					$('span.nextPaging').unbind('click');$('span.lastPaging').unbind('click');
				} else {
					$('span.nextPaging').css({color:'#000000'});$('span.lastPaging').css({color:'#000000'});
					$('span.nextPaging').bind('click', function(){paging.curPage += 1;load();});$('span.lastPaging').bind('click', function(){paging.curPage = paging.totalPage;load();});
				}
				$('span.totalPage').html(paging.totalPage);$('span.totalRow').html(paging.totalRow);$('input.goto').val(paging.curPage);
				$('input.goto').bind('keydown', function(event) {
					if(event.keyCode == 13) {
						var p = parseInt($(this).val());
						if (p != paging.curPage && p <= paging.totalPage) {paging.curPage = p;load();}
					} else if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || event.keyCode == 46 || event.keyCode == 8) {
						return true;
					}
					return false;
				});
				
				$('#selectPerPageRow').bind('change', function() {
					var p = parseInt($(this).val());
					paging.perPageRow = p;paging.curPage = 1;load();
				});
			}
		}
		
		function load(d) {
			if (op.url == '') {
				paging.needPaging = false;
				initDatas();
			} else {
				d = $.extend(op.params, paging, d);
				$.ajax({
					url: op.url,dataType: op.dataType,
					data: d,
					success: function(data) {
						datas = data.rows;paging = data.paging;
						initDatas();
				  	}
				});
			}
		}
		
		var r = {
			/**
			 * 获取选择行的Id
			 */
			getSelectItems: function() {
				var ids = '';
				var selects = $('input.datacheckbox:checked');
				if (selects.length == 0) {
					alert("请至少选择一个数据!");
					return "";
				}
				$.each($('input.datacheckbox:checked'), function(i, n) {
					if(n.value != "") {
						ids += n.value + ",";
					} else {
						ids += n.parentNode.parentNode.id + ",";
					}
				});
				return ids;
			},
			/**
			 * 重新加载数据
			 */
			reload : function(d) {
				load(d);
			},
			/**
			 * 设置查询参数
			 */
			setParams: function(params) {
				op.params = params;
			}
			
			/**
			 * 新增数据
			 */
			,addData : function(s) {
				datas.push(s);
				initDatas();
			}
			
			/**
			 * 移除数据
			 */
			,removeData: function(ids) {
				var tm = new Array();
				var id;
				$.each(datas, function(i, n) {
					id = (n.id && n.id != '') ? n.id : i;
					if (ids.indexOf(id) < 0) {
						tm.push(n);
					}
				});
				datas = tm;
				initDatas();
			}
			
			/**
			 * 获取数据集合
			 */
			,getDatas: function() {
				return datas;
			}
			
			/**
			 * 变更大小
			 */
			,resize : function(width, height) {
				if (width && width != "") {
					$('#zytable_body_div').css('width', width);
				}
				if (height && height != "") {
					$('#zytable_body_div').css('height', height);
				}
			}
		}
		return r;
	}
	
	/**
	 * 列表复选框
	 */
	CheckBoxCol = function(config) {
		config = $.extend({disabled : function(d){return false;}}, config);
		return {
			dataIndex:'id',width: '30px',text: '<input type="checkbox" class="datacheckbox" id="datacheckall" value=""/>',
			handle : function(d){return '<input type="checkbox" class="datacheckbox" value="' + d.id + '" id="datacheck_' + d.id + '" ' + (config.disabled(d) ? 'disabled="disabled"' : '') + ' />';}
		};
	};
})(jQuery);
分享到:
评论

相关推荐

    jQuery AJAX表格控件源码

    在网页开发中,数据展示和交互是不可或缺的部分,jQuery AJAX表格控件就是一种高效、动态的数据呈现方式。它利用jQuery库的强大功能,结合AJAX技术,实现在不刷新整个页面的情况下进行数据的加载、编辑和删除,提升...

    基于JQueryEasyUI类库的WebForm控件库

    **基于JQueryEasyUI类库的WebForm控件库** JQueryEasyUI是一个基于jQuery的UI框架,它封装了一系列的JavaScript组件,使得开发者能够轻松创建出功能丰富的Web应用程序界面。这个WebForm控件库是专门为.NET平台设计...

    jQuery AJAX表格控件(初版)源码

    《jQuery AJAX表格控件(初版)源码详解》 在Web开发中,表格控件是一种常见的数据展示和交互方式,而使用jQuery结合AJAX技术可以实现动态、高效的表格操作。本文将深入解析"jQuery AJAX表格控件(初版)"的源码,探讨...

    jquery插件,基于jquery的表格控件无刷新实现添加编辑删除统计功能

    本文将深入探讨一个基于jQuery的表格控件,该控件实现了无刷新的添加、编辑、删除和统计功能,以VS2008为开发环境,利用Ajax技术,结合JSON数据格式,为用户提供流畅的交互体验。 一、jQuery与Ajax基础 jQuery简化...

    一个JQuery +Ajax 封闭的一个GridView控件

    综上所述,这个项目提供了一个基于JQuery和Ajax的GridView控件,它允许用户动态调整列和数据条数,实现无刷新的页面更新,从而提高Web应用的数据展示效率和用户体验。开发者可能使用了JQuery的AJAX功能进行后台数据...

    一个JQuery +Ajax 封闭的一个GridView控件DataGrid

    【描述】:这个项目演示了如何结合jQuery和Ajax技术,创建一个具有动态加载、分页和排序功能的GridView控件。通过Ajax无刷新更新,提供流畅的用户体验,而jQuery则用于增强DOM操作和事件处理,使得用户交互更为便捷...

    基于JQuery的日历控件

    本篇文章将详细讲解基于JQuery实现的日历控件,通过分析给定的文件,我们可以了解到如何创建一个实用且美观的日历组件。 首先,我们来看一下压缩包中的文件: 1. `calendar.css`:这是样式表文件,用于定义日历...

    jquery 动态添加控件

    在JavaScript的世界里,jQuery是一个非常流行的库,它简化了DOM操作、事件处理和Ajax交互等任务。本篇文章将深入探讨如何使用jQuery动态添加控件,包括元素的创建、插入和绑定事件,以及在实际项目中的应用。 首先...

    C# Asp.net Jquery Ajax 经典案例

    5. **动态图表**:通过Ajax请求获取服务器上的数据分析结果,然后使用Jquery配合图表库(如Highcharts)动态渲染图表,展示实时或历史数据。 6. **拖放功能**:利用Jquery UI的拖放插件,用户可以方便地重新排列...

    jquery表格控件

    首先,jQuery表格控件的一个显著特点是它对多种格式的支持。它允许用户将表格数据导出为Word、Excel和PDF等常见文档格式,这极大地扩展了数据的使用场景。例如,用户可以轻松地将表格数据导出为Excel文件进行进一步...

    LigerUI是基于jQuery开发的一系列控件组

    4. **数据表格**:LigerUI的表格控件支持分页、排序、过滤和自定义列等功能,能够直接绑定到JSON或XML数据源,非常适合展示大量结构化数据。此外,表格还提供了行操作,如编辑、删除和新增,方便进行数据管理。 5. ...

    北大青鸟开发基于Ajax和控件技术的Web应用系统考试

    综上所述,"北大青鸟开发基于Ajax和控件技术的Web应用系统考试"涉及的是Web开发领域的核心技能,包括Ajax的异步通信和.NET框架下的控件技术。这些知识对于构建高性能、交互性强的Web应用至关重要。通过这个考试,...

    基于jQuery_常用控件收集

    **基于jQuery的常用控件收集** 在Web开发中,jQuery是一个非常重要的JavaScript库,它极大地简化了DOM操作、事件处理、动画制作以及Ajax交互。这篇博客主要探讨的是如何利用jQuery来构建和使用一些常见的UI控件,...

    jquery控件的下载

    - **与其他jQuery插件的集成**:jQuery控件往往可以与其他jQuery库或插件协同工作,如数据表格插件Datatables,或者图表库Chart.js等,以实现更复杂的界面交互。 总的来说,jQuery控件如columnFilters是现代Web开发...

    Grid AJAX多功能表格.NET版,基于jQuery实现.rar

    Grid AJAX多功能表格.NET版,基于jQuery实现,编译源项目可生成JqueryGrid.dll文件,这是本控件的核心文件,项目可运行于VS2005及以上版本。没有安装VS的朋友,可直接在ASP.NET环境下运行Default.aspx即可看到插件...

    jQuery控件简易日历表格代码.zip

    《jQuery控件简易日历表格代码详解》 在网页开发中,日历控件是一种常见的交互元素,用于用户选择日期,常应用于表单输入、事件安排等场景。jQuery作为一款强大的JavaScript库,提供了丰富的插件和扩展,使得创建...

    jQuery带分页动态数据表格插件

    本教程将深入讲解如何利用jQuery实现一个带分页的动态数据表格插件。 首先,我们需要理解jQuery的核心概念。jQuery通过提供易用的API,使得JavaScript代码更简洁、更高效。例如,`$(selector)`用于选取DOM元素,`....

    jquery图表控件,包括柱状图,曲线图,饼状图,仪表盘等

    本文将深入探讨jQuery图表控件,特别是基于jQuery实现的柱状图、曲线图、饼状图和仪表盘,这些都是数据可视化中不可或缺的元素。 柱状图是一种常用的数据表示方式,它通过矩形的长度来展示各分类的数值大小。在...

Global site tag (gtag.js) - Google Analytics