你这样做,不仅麻烦,而且有很多弊端,用下面这种动态表单的方法可以达到你的目的,以下是以jsp为例子的,asp与此类似/////////////// test1.jsp /////////////////////////////
<html>
<head>
<title>==动态表单示例 freefalcon 2002-12-05==</title>
</head>
<script language=javascript>
//增加一行
function addLine()
{
elm = thead1.lastChild.cloneNode(true);//复制隐藏的行
elm.style.display="block";//将其显示属性置为可见
tbody1.insertBefore(elm);//将新增行添至表格最后
tbody1.rows[tbody1.rows.length-1].cells[1].firstChild.value=tbody1.rows.length;//设置序号
tbody1.rows[tbody1.rows.length-1].cells[4].firstChild.selectedIndex=0;//初始化“性别”,不具备一般性,仅作为例子参考
}
//删除指定的行
function deleteLine()
{
for (var i=tbody1.children.length-1;i>=0;i--)
if (tbody1.children[i].firstChild.firstChild.checked)//如果某行被选中,则删除
tbody1.deleteRow(i);
for(var i=0;i<tbody1.children.length;i++)//重新设置序号
tbody1.rows[i].cells[1].firstChild.value=i+1;
}
</script>
<body>
<form name="form1" method="post" action="test2.jsp">
<table id="table1" border=1 width="100%" height="27" align="center">
<thead id="thead1">
<tr>
<th width="43" height="24">选择</th>
<th width="49" height="24">序号</th>
<th width="115" height="24">姓名</th>
<th width="83" height="24">年龄</th>
<th width="62" height="24">性别</th>
<th width="277" height="24">电子邮件</th>
</tr>
<tr style="display:none" align="center">
<td width="43" height="24">
<input type=checkbox name="checked"></td>
<td width="49" height="24">
<input size=5 name="num" readonly>
</td>
<td width="115" height="24">
<input size=15 name="name">
</td>
<td width="83" height="24">
<input size=10 name="age"></td>
<td width="62" height="24">
<select name="sex">
<option value="male" selected>男</option>
<option value="female">女</option>
</select>
</td>
<td width="277" height="24">
<input size=30 name="email">
</td>
</tr>
</thead>
<tbody id="tbody1">
<tr align="center">
<td width="43" height="24">
<input type=checkbox name="checked"></td>
<td width="49" height="24">
<input size=5 name="num" value=1 readonly>
</td>
<td width="115" height="24">
<input size=15 name="name">
</td>
<td width="83" height="24">
<input size=10 name="age"></td>
<td width="62" height="24">
<select name="sex">
<option value="male" selected>男</option>
<option value="female">女</option>
</select>
</td>
<td width="277" height="24">
<input size=30 name="email">
</td>
</tr>
</tbody>
</table>
<p align=center>
<input type=button value="添加" onClick="addLine()">
<input type=button value="删除" onClick="deleteLine()">
<input type=submit value="提交">
</p>
</form>
</body>
</html>/////////////// test2.jsp ////////////////////////
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<body>
<%
String[] num=request.getParameterValues("num");
String[] name=request.getParameterValues("name");
String[] age=request.getParameterValues("age");
String[] sex=request.getParameterValues("sex");
String[] email=request.getParameterValues("email");for(int i=1;i<num.length;i++)//注意是从1开始,因为有一行隐藏的输入框
{
out.println(num[i]+" "+name[i]+" "+age[i]+" "+sex[i]+" "+email[i]+"<br>");//根据需要处理
}
%>
</body>
</html>
<html>
<head>
<title>==动态表单示例 freefalcon 2002-12-05==</title>
</head>
<script language=javascript>
//增加一行
function addLine()
{
elm = thead1.lastChild.cloneNode(true);//复制隐藏的行
elm.style.display="block";//将其显示属性置为可见
tbody1.insertBefore(elm);//将新增行添至表格最后
tbody1.rows[tbody1.rows.length-1].cells[1].firstChild.value=tbody1.rows.length;//设置序号
tbody1.rows[tbody1.rows.length-1].cells[4].firstChild.selectedIndex=0;//初始化“性别”,不具备一般性,仅作为例子参考
}
//删除指定的行
function deleteLine()
{
for (var i=tbody1.children.length-1;i>=0;i--)
if (tbody1.children[i].firstChild.firstChild.checked)//如果某行被选中,则删除
tbody1.deleteRow(i);
for(var i=0;i<tbody1.children.length;i++)//重新设置序号
tbody1.rows[i].cells[1].firstChild.value=i+1;
}
</script>
<body>
<form name="form1" method="post" action="test2.jsp">
<table id="table1" border=1 width="100%" height="27" align="center">
<thead id="thead1">
<tr>
<th width="43" height="24">选择</th>
<th width="49" height="24">序号</th>
<th width="115" height="24">姓名</th>
<th width="83" height="24">年龄</th>
<th width="62" height="24">性别</th>
<th width="277" height="24">电子邮件</th>
</tr>
<tr style="display:none" align="center">
<td width="43" height="24">
<input type=checkbox name="checked"></td>
<td width="49" height="24">
<input size=5 name="num" readonly>
</td>
<td width="115" height="24">
<input size=15 name="name">
</td>
<td width="83" height="24">
<input size=10 name="age"></td>
<td width="62" height="24">
<select name="sex">
<option value="male" selected>男</option>
<option value="female">女</option>
</select>
</td>
<td width="277" height="24">
<input size=30 name="email">
</td>
</tr>
</thead>
<tbody id="tbody1">
<tr align="center">
<td width="43" height="24">
<input type=checkbox name="checked"></td>
<td width="49" height="24">
<input size=5 name="num" value=1 readonly>
</td>
<td width="115" height="24">
<input size=15 name="name">
</td>
<td width="83" height="24">
<input size=10 name="age"></td>
<td width="62" height="24">
<select name="sex">
<option value="male" selected>男</option>
<option value="female">女</option>
</select>
</td>
<td width="277" height="24">
<input size=30 name="email">
</td>
</tr>
</tbody>
</table>
<p align=center>
<input type=button value="添加" onClick="addLine()">
<input type=button value="删除" onClick="deleteLine()">
<input type=submit value="提交">
</p>
</form>
</body>
</html>/////////////// test2.jsp ////////////////////////
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<body>
<%
String[] num=request.getParameterValues("num");
String[] name=request.getParameterValues("name");
String[] age=request.getParameterValues("age");
String[] sex=request.getParameterValues("sex");
String[] email=request.getParameterValues("email");for(int i=1;i<num.length;i++)//注意是从1开始,因为有一行隐藏的输入框
{
out.println(num[i]+" "+name[i]+" "+age[i]+" "+sex[i]+" "+email[i]+"<br>");//根据需要处理
}
%>
</body>
</html>
解决方案 »
- 测试DOME浏览器兼容性,发现在傲游浏览器中无法用js调用cookie
- 请问这是哪里的时间,中国的怎么弄?
- textbox.attributes.add()方法的疑问
- 急:现在哪里可以下载JSVM优化的Ext for jsvm啊
- 如何截获网页中嵌入的FLASH播放器的鼠标事件?
- 关于select的item的移动,虽然实现了,但是从下往上移动时,整个控件就会重新初始化一遍,回到初始状态,怎样保留其状态?
- 求一段代码,关于提交表单 验证是否为空,是否符合要求的代码
- 纯HTML页面如何使用JavaScript与JAVA交互?
- JavaScript实现翻书特效,请问谁会?
- 世纪难题!之一
- 关于下拉框定位的问题 (第500分)
- Spreadsheet的问题
<html>
<head>
<title>Checkbox 问题</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<script>
function document.onclick(){
var e=event.srcElement;
if(e.tagName=="INPUT" && e.type=="checkbox"){
var r=e.parentElement.parentElement;
for(i=2;i<5;i++)r.cells[i].firstChild.disabled=!e.checked;//改变输入框的属性
var chks=document.getElementsByName("checkbox");
var index=1;
for(i=0;i<chks.length;i++){
if(chks[i].checked)chks[i].value=index++;//修改value,但不按点击的先后顺序
else chks[i].value=0;//未选中的都为0,以便接收页面判断
}
//下面是测试用的
for(i=0;i<chks.length;i++){
alert(chks[i].value);
}
}
}
</script>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="">
<table width="100%" border="1" cellspacing="0" cellpadding="1">
<tr>
<td width="6%"> </td>
<td width="7%">序号</td>
<td width="34%">货号</td>
<td width="32%">描述</td>
<td width="21%">数量</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="1" >
</td>
<td width="7%">1.</td>
<td width="34%">
<input type="text" name="textfield2" disabled>
</td>
<td width="32%">
<textarea name="textfield" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield3" disabled>
</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="2" >
</td>
<td width="7%">2.</td>
<td width="34%">
<input type="text" name="textfield4" disabled>
</td>
<td width="32%">
<textarea name="textfield5" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield6" disabled>
</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="3">
</td>
<td width="7%">3.</td>
<td width="34%">
<input type="text" name="textfield22" disabled>
</td>
<td width="32%">
<textarea name="textarea" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield23" disabled>
</td>
</tr>
</table>
</form>
</body>
</html>
多谢你,但是可不可以做到让CHECKBOX的值按照我点击的先后顺序来自动赋值!!
很感激你,真的很感激!!!
<html>
<head>
<title>Checkbox 问题</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<script>
var index=1;
function document.onclick(){
var e=event.srcElement;
if(e.tagName=="INPUT" && e.type=="checkbox"){
var r=e.parentElement.parentElement;
for(i=2;i<5;i++)r.cells[i].firstChild.disabled=!e.checked;//改变输入框的属性
if(e.checked)e.value=index++;
else{
e.value=0;index--;
var chks=document.getElementsByName("checkbox");
for(i=0;i<chks.length;i++){
if(chks[i].value>e.value&&chks[i].checked){
chks[i].value=eval(chks[i].value-1);
//修改value,按点击的先后顺序
}
} }
//下面是测试用的
var chks=document.getElementsByName("checkbox");
for(i=0;i<chks.length;i++){
alert(chks[i].value);
} }
}
</script>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="">
<table width="100%" border="1" cellspacing="0" cellpadding="1">
<tr>
<td width="6%"> </td>
<td width="7%">序号</td>
<td width="34%">货号</td>
<td width="32%">描述</td>
<td width="21%">数量</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="0" >
</td>
<td width="7%">1.</td>
<td width="34%">
<input type="text" name="textfield2" disabled>
</td>
<td width="32%">
<textarea name="textfield" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield3" disabled>
</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="0" >
</td>
<td width="7%">2.</td>
<td width="34%">
<input type="text" name="textfield4" disabled>
</td>
<td width="32%">
<textarea name="textfield5" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield6" disabled>
</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="0">
</td>
<td width="7%">3.</td>
<td width="34%">
<input type="text" name="textfield22" disabled>
</td>
<td width="32%">
<textarea name="textarea" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield23" disabled>
</td>
</tr>
</table>
</form>
</body>
</html>
我上面是按选中的顺序来改变value的值呀,没选中的都被设为0,是为了将其与选中的区分开,而且我也考虑到了选择后再取消选择对value的影响,你还要实现什么要求?
需要 按照它点击的顺序来给他副值,有可能选中了之后再取消!!!明白我的要求了吗?
<html>
<head>
<title>Checkbox 问题</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<script>
var index=1;
function document.onclick(){
var e=event.srcElement;
if(e.name=="checkbox"){
var r=e.parentElement.parentElement;
for(i=2;i<5;i++)r.cells[i].firstChild.disabled=!e.checked;//改变输入框的属性
if(e.checked)e.value=index++;
else{
var chks=document.getElementsByName("checkbox");
for(i=0;i<chks.length;i++){
if(chks[i].checked&&chks[i].value>e.value){//alert(i+" "+chks[i].value)
chks[i].value=eval(chks[i].value-1);
//修改value,按点击的先后顺序
}
}
e.value=0;index--; //应该放在这里
}
//下面是测试用的
var chks=document.getElementsByName("checkbox");
for(i=0;i<chks.length;i++){
alert(chks[i].value);
} }
}
</script>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="">
<table width="100%" border="1" cellspacing="0" cellpadding="1">
<tr>
<td width="6%"> </td>
<td width="7%">序号</td>
<td width="34%">货号</td>
<td width="32%">描述</td>
<td width="21%">数量</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="0" >
</td>
<td width="7%">1.</td>
<td width="34%">
<input type="text" name="textfield2" disabled>
</td>
<td width="32%">
<textarea name="textfield" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield3" disabled>
</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="0" >
</td>
<td width="7%">2.</td>
<td width="34%">
<input type="text" name="textfield4" disabled>
</td>
<td width="32%">
<textarea name="textfield5" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield6" disabled>
</td>
</tr>
<tr>
<td width="6%">
<input type="checkbox" name="checkbox" value="0">
</td>
<td width="7%">3.</td>
<td width="34%">
<input type="text" name="textfield22" disabled>
</td>
<td width="32%">
<textarea name="textarea" disabled></textarea>
</td>
<td width="21%">
<input type="text" name="textfield23" disabled>
</td>
</tr>
</table>
</form>
</body>
</html>
我想不通还有哪儿不合要求?
也许是我理解错了,首先按点击的先后顺序赋值,
如果取消一个checkbox的选择,那么比它的值大的checkbox(即在其之后点击的)的值将都减小1,这是为了防止产生编号上的空缺
如果一个取消了的checkbox再次被选中时,它将被视为最后一个选中的,即不管它前面是否被选中
总之,一定是按照选择的先后顺序来赋值的
我不知道是否存在bug,但至少我没有发现
多谢你的帮忙, 还差一点的是,第一个被选中的 值要设置为1,依此类推,不过问题解决了,又出来一个更大的问题,烦,唉!!