JQuery实现表格动态增加行并对新行添加事件

实现功能:

通常在编辑表格时表格的行数是不确定的,如果一次增加太多行可能导致页面内容太多,反应变慢;通过此程序实现表格动态增加行,一直保持最下面有多个空白行。

效果:

一:原始页面

二:表1增加新行并绑定timepicker

三:表2自动增加行,新行绑定timepicker

HTML源码

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

<!DOCTYPE html>

<html xmlns="https://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<title></title>

<link href="../Script/jquery-easyui-1.3.2/themes/default/easyui.css" rel="external nofollow" rel="stylesheet" />

<style>

.autoRows{

width: 350px; border:1px green solid;

}

.autoRows tbody tr td{

border-bottom:1px green solid;

margin:0px;

}

.autoRows thead{

background-color:#8ec7d7;

}

.autoRows tfoot {

background-color: #8ec7d7;

}

</style>

</head>

<body>

<table border="0" cellspacing="0" id="table1" class="autoRows">

<thead>

<tr>

<th>表头1</th>

<th>表头1</th>

<th>表头1</th>

</tr>

<tr>

<th>表头2</th>

<th>表头2</th>

<th>表头2</th>

</tr>

</thead>

<tbody>

<tr>

<td>

<input id="Button1" type="button" value="insertAfter" onclick="addrow(this);" /></td>

<td>

<input id="Button3" type="button" value="Clear" onclick="$.fn.tableAutoRow.clearRowData(this, 2, 2, false);" /></td>

<td>

<input id="Text2" type="text" value="aaaa" /></td>

</tr>

<tr>

<td>

<input id="Button2" type="button" value="insertBefore" onclick="$.fn.tableAutoRow.insertRow(this,1,true,false);" /></td>

<td>

<input id="Button4" type="button" value="Reset" onclick="$.fn.tableAutoRow.clearRowData(this, 2, 2, true);" /></td>

<td>

<input id="Text1" name="ttt" type="text" value="asdfasfasfdsd" /></td>

</tr>

<tr>

<td>

<input id="Button5" type="button" value="insertBefore" onclick="$.fn.tableAutoRow.insertRow(this,1,true,false);" /></td>

<td>

<input id="Button6" type="button" value="Reset" onclick="$.fn.tableAutoRow.clearRowData(this, 2, 2, true);" /></td>

<td>

<input id="Text3" type="text" name="Text3" /></td>

</tr>

</tbody>

<tfoot>

<tr>

<th>表尾1</th>

<th>表尾2</th>

<th>表尾3</th>

</tr>

</tfoot>

</table>

<p style="height:20px;"></p>

<table border="0" cellspacing="0" id="table2" class="autoRows">

<thead>

<tr>

<th>表头1</th>

<th>表头1</th>

<th>表头1</th>

</tr>

<tr>

<th>表头2</th>

<th>表头2</th>

<th>表头2</th>

</tr>

</thead>

<tbody>

<tr>

<td>

<input id="Button7" type="button" value="insertAfter" onclick="addrow(this);" /></td>

<td>

<input id="Button8" type="button" value="Clear" onclick="$.fn.tableAutoRow.clearRowData(this, 2, 2, false);" /></td>

<td>

<input id="Text4" type="text" value="aaaa" /></td>

</tr>

<tr>

<td>

<input id="Button9" type="button" value="insertBefore" onclick="$.fn.tableAutoRow.insertRow(this, 1, true, false);" /></td>

<td>

<input id="Button10" type="button" value="Reset" onclick="$.fn.tableAutoRow.clearRowData(this, 2, 2, true);" /></td>

<td>

<input id="Text5" name="ttt" type="text" value="asdfasfasfdsd" /></td>

</tr>

<tr>

<td>

<input id="Button11" type="button" value="insertBefore" onclick="$.fn.tableAutoRow.insertRow(this, 1, true, false);" /></td>

<td>

<input id="Button12" type="button" value="Reset" onclick="$.fn.tableAutoRow.clearRowData(this, 2, 2, true);" /></td>

<td>

<input id="Text6" type="text" name="Text3" /></td>

</tr>

</tbody>

<tfoot>

<tr>

<th>表尾1</th>

<th>表尾2</th>

<th>表尾3</th>

</tr>

</tfoot>

</table>

</body>

</html>

<script src="../Script/jquery-1.7.2.min.js"></script>

<script src="../Script/jquery.tableAutoRow.js"></script>

<script src="../Script/jquery-easyui-1.3.2/jquery.easyui.min.js"></script>

<script src="../Script/jquery.timepicker.js"></script>

<script type="text/javascript">

$(function () {

$(".autoRows").tableAutoRow(aaa);

function aaa(row) {

$(row).find(‘:text‘).timepicker();

}

});

function addrow(obj) {

$.fn.tableAutoRow.insertRow(obj);

}

</script>

JS源码:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

/// <reference path="jquery-1.7.2.min.js" />

//为表格主体添加单击事件,当单击时添加行数,使表格保持有n个空行

(function ($) {

$.fn.extend({

rowfunction: null,

tableAutoRow: function (newRowFunction) {

rowfunction = newRowFunction;

return $(this).each(function () {

var tb = this;

if (!(this.tagName.toUpperCase() == "TBODY")) {

if (!this.tBodies[0]) {

return;

} else {

tb = this.tBodies[0];

}

}

//添加一个隐藏行,后面新增行复制此行

var lastRow = tb.rows[tb.rows.length - 1];

var row = $(lastRow).clone(true, true);

$(row).insertAfter($(tb).find("tr:last")).hide();

//为除所有行添加事件,当获得焦点时自动增加新行

for (var i = 0; i < tb.rows.length; i++) {

AddAutoRowsEvent(tb.rows[i]);

}

});

}

});

//自动增加行

function autoRows(e) {

var e = e || event;

var obj = e.target || e.srcElement;

while (obj.tagName != "TR") {

obj = obj.parentNode;

}

var tb = obj.parentNode;

var index = $(obj).index();

var n = 5 - (tb.rows.length - index);

if (n > 0) {

var lastRow = tb.rows[tb.rows.length - 1];

for (var j = 0; j < n; j++) {

var row = $(lastRow).clone(true, true);

//将新行添加到最后一行之前

row.insertBefore($(tb).find("tr:last")).show();

//为新增加的行添加事件

//AddAutoRowsEvent(tb.rows[tb.rows.length - 2]);

//如果有回调函数则执行

if (typeof (rowfunction) == ‘function‘) {

rowfunction(row);

}

}

}

}

//为指定行增加事件

function AddAutoRowsEvent(tr) {

//如果是JQuery对象则转为HTML对象

if (tr instanceof jQuery) {

tr = tr[0];

}

$(tr).bind(‘click‘, autoRows);

var c = tr.cells.length;

for (var j = 0; j < c; j++) {

var childs = tr.cells[j].childNodes;

for (var k = 0; k < childs.length; k++) {

if (childs[k].type == "text" || childs[k].type == "textarea" || childs[k].type == "button") {

$(childs[k]).bind(‘focus‘, autoRows);

}

}

}

}

//在表格中指定位置插入指定行数,新插入的行内容为同一表格主体最后一行

//obj:行内的任意对象

//n:要增加的行数

//bAutoRows:是否要添加自动增加行的属性

$.fn.tableAutoRow.insertRow = function (obj, n, bAutoRows, isInsertAfter) {

var loop = 0; //加入循环次数,防止死循环

while (obj.tagName != "TR" && loop < 10) {

obj = obj.parentNode;

loop++;

}

if (obj.tagName != "TR") {

return;

}

var tb = obj.parentNode;

switch (arguments.length) {

case 3:

var isInsertAfter = true;

case 2:

var bAutoRows = true;

var isInsertAfter = true;

case 1:

var bAutoRows = true;

var isInsertAfter = true;

var n = 1;

}

for (var i = 0; i < n; i++) {

var lastRow = tb.rows[tb.rows.length - 1];

var row = $(lastRow).clone(true, true);

//将新行添加到当前行之前/后

if (isInsertAfter) {

row.insertAfter(obj).show();

} else {

row.insertBefore(obj).show();

}

if (bAutoRows) {

AddAutoRowsEvent(row);

}

}

}

//清除指定行数据

//obj为行或者行内的节点

//startColnum:起始列

//endColumn:终止列

//isReset:是否恢复到初始值

$.fn.tableAutoRow.clearRowData = function (obj, startColnum, endColumn, isReset) {

var loop = 0; //加入循环次数,防止死循环

while (obj.tagName != "TR" && loop < 10) {

obj = obj.parentNode;

loop++;

}

if (obj.tagName != "TR") {

return;

}

var cellsCount = obj.cells.length; //此行单元格总数

if (startColnum < 0 || !startColnum) { //如果未指定清除起始列则从第一列清除

startColnum = 0;

}

if (endColumn > cellsCount - 1 || !endColumn) { //如果未指定清除终止列则清除到最后一列前(通常最后一列用于放置清除按钮)

endColumn = cellsCount - 1;

}

if (isReset == undefined) {

isReset = false;

}

for (var c = startColnum; c <= endColumn; c++) //循环各列,设置单元格里的控件值

{

for (var j = 0; j < obj.cells[c].childNodes.length; j++) { //循环处理指定单元格中的子节点

var node = obj.cells[c].childNodes[j];

setObjData(node, isReset);

}

}

};

function setObjData(node, isReset) {

switch (node.type) {

case "text":

case "hidden":

case "textarea":

if (isReset) {

node.value = node.defaultValue;

} else {

node.value = "";

}

break;

case "select-one":

case "select-multiple":

if (isReset) {

for (var k = node.options.length - 1; k >= 0; k--) {

node.options[k].selected = node.options[k].defaultSelected;

}

} else {

for (var k = node.options.length - 1; k >= 0; k--) {

//node.options.remove(k);

node.options[k].selected = false;

}

}

break;

case "checkbox":

case "radio":

if (isReset) {

node.checked = node.defaultChecked;

} else {

node.checked = false;

}

break;

}

if (node.childNodes && node.childNodes.length > 0) {

var l = node.childNodes.length;

for (var i = 0; i < l; i++) {

setObjData(node.childNodes[i], isReset);

}

}

}

})(jQuery);

原文地址:https://www.cnblogs.com/zhuyeshen/p/11433756.html

时间: 2024-10-19 22:53:15

JQuery实现表格动态增加行并对新行添加事件的相关文章

js 表格动态增加行通用函数

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <script src="jquery.js"></script>     <style>         td{height:30px;border:1px solid #000;}     </st

js 动态增加行删除行

1 <body> 2 <table id="tableID" border="1" align="center" width="60%"> 3 <tr> 4 <th>用户名</th> 5 <th>邮箱</th> 6 <th>操作</th> 7 </tr> 8 <tbody id="tbodyI

jquery表格动态增删改及取数据绑定数据完整方案

一 前言 上一篇Jquery遮罩插件,想罩哪就罩哪! 结尾的预告终于来了. 近期参与了一个针对内部员工个人信息收集的系统,其中有一个需求是在填写各个相关信息时,需要能动态的增加行当时公司有自己的解决方案 那就是用GridView 那个庞大的服务器控件,我一真就不怎么喜欢用服务器控件,于是极力说服PM用js来处理,并成功争取到了,先说下如果用GridView来处理的缺点, 1 生成的html代码会比较冗余, 2 每一个操作都会伴随页面回发, 3 每个操作都会刷新页面,这样的用户体验极差,就算用up

JQUERY方法给TABLE动态增加行

比如设置table的id为tabvar trHTML = "<tr><td>...</td></tr>"$("#tab").append(trHTML);//在table最后面添加一行$("#tab tr:eq(2)").after(trHTML); // 在table的第3行后面添加一行这样就可以进行动态的添加行了,至于你是通过什么事件来动态添加那就看你自己的意思了,通过button或者div之类

基于jquery的表格动态创建,自动绑定,自动获取值

最近刚加入GUT项目,学习了很多其他同事写的代码,感觉受益匪浅. 在GUT项目中,经常会碰到这样一个问题:动态生成表格,包括从数据库中读取数据,并绑定在表格中,以及从在页面上通过jQuery新增删除表格.如下所示: 在实现过程中,开发人员经常采用如下方式来实现: 1)          在前台,通过js生成表格行的html字符串,然后通过jquery的after方法加到表格底部. 2)          在后台,读取数据库,然后生成表格的html字符串,然后传递给前台渲染 3)         

C#动态增加行、删除行

原来有一行: 点击添加,在下面增加同样的一行 新增加的行有一列删除按钮,点击某行的删除按钮时,删除当前行 方法: 哈哈,我果然好聪明啊 1.文本框.文本框.添加按钮 2.一个DataGridView(放一个panel里),三列分别是文本框.文本框.按钮列 DataGridView: 隐藏标题栏:dataGridView1.ColumnHeadersVisible = false; 隐藏第一列:RowHeadersVisible=false; 不自动增加新行:AllowUserToAddRows=

jquery中对动态生成的标签不会响应click事件

Jquery中对ajax动态生成的html标签不会响应 $(selector).click(function.. 或者$(selector).bind('click',function.., 需要用.live. 我们这样绑定元素的click事件,以后jquery动态生成的元素,click事件也有效. $('.clickme').live('click', function() { alert("Live handler called."); });

C# 在Word表格中插入新行(表格含合并行)

public string CreateWordFile(string CheckedInfo)         {             string message = "";             try             {                 Object Nothing = System.Reflection.Missing.Value;                 Directory.CreateDirectory("C:/CNSI&q

jQuery的下面是动态表格动态表单中的HTML代码

动态表格动态表单中的Jquery代码 <script type="text/javascript" src="/include/jquery/jquery-1.1.3.1.pack.js"></script><script language="javascript">$("#addjobline").css("cursor","pointer");$(