最近见到了这样一个报表:要求填写项目可以动态增加,尝试着用JavaScript对该效果做出了实现。
经过分析:
1. 可以将上表的一行看做一个JS的Object;
2. 使用一个JS的Array来存储所有的内容;
3. 点击按钮时,相当于保存当前Object并刷新表格。
先实现一个简化版本:
简化版本的代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>动态添加表格列</title>
<style>
#content_table tr {
min-height: 35px;
}
#content_table td {
margin-top:10px;
border: 1px dotted #CCCCCC;
}
</style>
</head>
<body>
<script language="javascript">
/* 将 \n 替换成 <br /> 以便显示 */
String.prototype.replaceAll = function(s1,s2) {
return this.replace(new RegExp(s1,"gm"),s2);
}
var contentList = new Array();
function appendRow() {
var contentContainer = document.getElementById("content");
var contentObj = new Object();
contentObj.content = contentContainer.value.replaceAll('\n', "<br />");
contentList[contentList.length] = contentObj;
reloadTable();
}
function reloadTable() {
var tableContainer = document.getElementById("table_container");
var arrayIndex = 0;
var htmlContent = '<table id="content_table" border="0">';
for (; arrayIndex < contentList.length; ++arrayIndex) {
var tmpContent = contentList[arrayIndex].content;
htmlContent += '<tr>';
htmlContent += '<td> ' + (arrayIndex + 1) + ' </td>';
htmlContent += '<td> ' + tmpContent + ' </td>';
htmlContent += '<td> </td>';
htmlContent += '</tr>';
}
htmlContent += '<tr><td width="50">' + (arrayIndex + 1) + '</td><td width="350">';
htmlContent += '<textarea id="content" rows="3" cols="80"></textarea></td>';
htmlContent += '<td width="50"><input type="button" value="追加" οnclick="appendRow()" />';
htmlContent += '</td></tr>';
htmlContent += "<table>";
tableContainer.innerHTML = htmlContent;
}
</script>
<div id="table_container">
<table id="content_table" border="0">
<tr>
<td width="50">1</td>
<td width="350">
<textarea id="content" rows="3" cols="80"></textarea>
</td>
<td width="50">
<input type="button" value="追加" οnclick="appendRow()" />
</td>
</tr>
</table>
</div>
</body>
</html>
使用以上代码便可以实现简单的需求。
复杂报表的源码可以从: http://download.youkuaiyun.com/detail/wwwwwwking/6847117 下载
根据以上原理,便可以制作出更加复杂的动态报表。