[求助]一段全选/全删代码,如从下一行一行地删,能全删,但如用全选/全删方式,却删不全
·
下面的代码是一段全选/全删表格代码,有趣的是,这个表格,如从下向上打勾一行一行地删除,最后能全部删除完,但如用全选/选消(Select All / Clear All)方式全删,则只能删最下边的一行,其余删不掉。如从上往下一行一行地删,那么第二行就删不掉。这第二行(002)的代码没什么异常,却删不掉。大家不妨试试看。不知问题在哪。请高手赐教。
<html>
<head>
<table width="960" border="0" cellspacing="0" cellpadding="0" class="tb" id="tlist">
<thead>
<tr>
<td width="150"><input type="checkbox" name="checkall" onClick="check_all(this)" >Select All / Clear All</td>
<td width="150">  ITEM NO</td>
<td width="360">                                ITEM DESCRIPTION</td>
<td width="100">        QTY</td>
<td width="100">         PRICE</td>
<td width="100">        TOTAL</td>
</tr>
</thead>
</table>
</head>
<table width="960" border="0" cellspacing="0" cellpadding="0" class="tb" id="tlist">
<tr>
<script language="JavaScript">
function check_all(obj){
for(i=0;i<document.getElementsByName("c").length;i++){
document.getElementsByName("c")[i].checked=obj.checked;
}
}
</script>
<td align="center width="110"> <input type="checkbox" name="c" /> </td>
<td align="center width="100"> <input type= "text" id="fno1" name="fno1" size=32 value="001"> </td>
<td align="center" width="360"><input type= "text" size=30 value="television"> </td>
<td align="center width="130"> <input type="text" id="fqty1" name="fqty1" size=7 maxlength=7 value='250' onchange='chtotal(1);'></td>
<td align="center width="130"> <input type="text" id="fprice1" name="fprice1" size=6 maxlength=6 value='0' onchange='chtotal(1);'></td>
<td align="center width="130"> <input type="text" id="ftotal1" name="ftotal1" size=8 readonly > </td>
</tr>
<tr>
<script language="JavaScript">
function check_all(obj){
for(i=0;i<document.getElementsByName("c").length;i++){
document.getElementsByName("c")[i].checked=obj.checked;
}
}
</script>
<td align="center width="110"> <input type="checkbox" name="c" /> </td>
<td align="center width="100"> <input type= "text" id="fno2" name="fno2" size=32 value="002"> </td>
<td align="center" width="360"><input type= "text" size=30 value="radio"> </td>
<td align="center width="130"> <input type="text" id="fqty2" name="fqty2" size=7 maxlength=7 value='120' onchange='chtotal(2);'></td>
<td align="center width="130"> <input type="text" id="fprice2" name="fprice2" size=6 maxlength=6 value='0' onchange='chtotal(2);'></td>
<td align="center width="130"> <input type="text" id="ftotal2" name="ftotal2" size=8 readonly > </td>
</tr>
<tr>
<script language="JavaScript">
function check_all(obj){
for(i=0;i<document.getElementsByName("c").length;i++){
document.getElementsByName("c")[i].checked=obj.checked;
}
}
</script>
<td align="center width="110"> <input type="checkbox" name="c" /> </td>
<td align="center width="100"> <input type= "text" id="fno3" name="fno3" size=32 value="003"> </td>
<td align="center" width="360"><input type= "text" size=30 value="display"> </td>
<td align="center width="130"> <input type="text" id="fqty3" name="fqty3" size=7 maxlength=7 value='400' onchange='chtotal(3);'></td>
<td align="center width="130"> <input type="text" id="fprice3" name="fprice3" size=6 maxlength=6 value='0' onchange='chtotal(3);'></td>
<td align="center width="130"> <input type="text" id="ftotal3" name="ftotal3" size=8 readonly > </td>
</tr>
<script language="javascript">
function deleteAll(obj){
var checked = document.getElementsByName(obj);
debugger
for(var i = 0; i < checked.length; i ++){
if(checked[i].checked){
var tr=checked[i].parentNode.parentNode;
var tbody=tr.parentNode;
document.getElementById("fprice" + (i+1)).value=0;
chtotal(i+1);
tbody.removeChild(tr);
i--;
}
}
}
</script>
<td><input type="button" name="delete_button" value="Delete" onclick="deleteAll('c');"></td>
<tr class="totalsum"><td>Total</td><td colspan=4></td><td colspan=2 align='right'><b id="totalsum">0</b></td><td colspan=2></td></tr>
<script type="text/javascript">
function delrecord(btn) {/////////
var tr = btn.parentNode.parentNode, tbody = tr.parentNode, rowIndex = tr.rowIndex+1;
var t = document.getElementById("ftotal" + rowIndex), tt = document.getElementById("totalsum");
var btn = document.getElementById('delbutton' + (rowIndex - 1));
if (btn) btn.disabled = false; //这里将上一个button设置为有效
tbody.removeChild(tr);
}
function chtotal(id) {
var tt = document.getElementById("totalsum");
var q = document.getElementById("fqty" + id);
var p = document.getElementById("fprice" + id);
var t = document.getElementById("ftotal" + id);
if (q.value != '' && p.value != '') {
var old = t.getAttribute('ov');
if (old) old = parseInt(old); else old = 0;
t.value = q.value * p.value;
t.setAttribute('ov', t.value);
tt.innerHTML = parseInt(tt.innerHTML) + parseInt(t.value) - old;
}
}
</script>
</tbody>
</table>
</html>
------解决方案--------------------
没问题啊,从测试过了
<html>
<head>
<table width="960" border="0" cellspacing="0" cellpadding="0" class="tb" id="tlist">
<thead>
<tr>
<td width="150"><input type="checkbox" name="checkall" onClick="check_all(this)" >Select All / Clear All</td>
<td width="150">  ITEM NO</td>
<td width="360">                                ITEM DESCRIPTION</td>
<td width="100">        QTY</td>
<td width="100">         PRICE</td>
<td width="100">        TOTAL</td>
</tr>
</thead>
</table>
</head>
<table width="960" border="0" cellspacing="0" cellpadding="0" class="tb" id="tlist">
<tr>
<script language="JavaScript">
function check_all(obj) {
for (i = 0; i < document.getElementsByName("c").length; i++) {
document.getElementsByName("c")[i].checked = obj.checked;
}
}
</script>
<td align="center width="110"> <input type="checkbox" name="c" /> </td>
<td align="center width="100"> <input type= "text" id="fno1" name="fno1" size=32 value="001"> </td>
<td align="center" width="360"><input type= "text" size=30 value="television"> </td>
<td align="center width="130"> <input type="text" id="fqty1" name="fqty1" size=7 maxlength=7 value='250' onchange='chtotal(1);'></td>
<td align="center width="130"> <input type="text" id="fprice1" name="fprice1" size=6 maxlength=6 value='0' onchange='chtotal(1);'></td>
<td align="center width="130"> <input type="text" id="ftotal1" name="ftotal1" size=8 readonly > </td>
</tr>
<tr>
<script language="JavaScript">
function check_all(obj) {
for (i = 0; i < document.getElementsByName("c").length; i++) {
document.getElementsByName("c")[i].checked = obj.checked;
}
}
</script>
<td align="center width="110"> <input type="checkbox" name="c" /> </td>
<td align="center width="100"> <input type= "text" id="fno2" name="fno2" size=32 value="002"> </td>
<td align="center" width="360"><input type= "text" size=30 value="radio"> </td>
<td align="center width="130"> <input type="text" id="fqty2" name="fqty2" size=7 maxlength=7 value='120' onchange='chtotal(2);'></td>
<td align="center width="130"> <input type="text" id="fprice2" name="fprice2" size=6 maxlength=6 value='0' onchange='chtotal(2);'></td>
<td align="center width="130"> <input type="text" id="ftotal2" name="ftotal2" size=8 readonly > </td>
</tr>
<tr>
<script language="JavaScript">
function check_all(obj) {
for (i = 0; i < document.getElementsByName("c").length; i++) {
document.getElementsByName("c")[i].checked = obj.checked;
}
}
</script>
<td align="center width="110"> <input type="checkbox" name="c" /> </td>
<td align="center width="100"> <input type= "text" id="fno3" name="fno3" size=32 value="003"> </td>
<td align="center" width="360"><input type= "text" size=30 value="display"> </td>
<td align="center width="130"> <input type="text" id="fqty3" name="fqty3" size=7 maxlength=7 value='400' onchange='chtotal(3);'></td>
<td align="center width="130"> <input type="text" id="fprice3" name="fprice3" size=6 maxlength=6 value='0' onchange='chtotal(3);'></td>
<td align="center width="130"> <input type="text" id="ftotal3" name="ftotal3" size=8 readonly > </td>
</tr>
<script language="javascript">
function deleteAll(obj) {
var checked = document.getElementsByName(obj);
//因为没删除一行checked对象的length也会-1,但是i会继续增加,所以只能删除一半,i++放到函数体中,不删除行的时候再++
for (var i = 0; i < checked.length; /*i++*/) {
if (checked[i].checked) {
var tr = checked[i].parentNode.parentNode;
var tbody = tr.parentNode;
//下面2句需要修改,因为i在删除的时候不变,导致上一行对象移除后找不到对象了,按照DOM关系来更新
//document.getElementById("fprice" + (i + 1)).value = 0;
var input = tr.cells[4].getElementsByTagName('input')[0];
input.value = 0;
chtotal(input.id.replace('fprice', ''));
tbody.removeChild(tr);
} else i++;
}
}
</script>
<td><input type="button" name="delete_button" value="Delete" onclick="deleteAll('c');"></td>
<tr class="totalsum"><td>Total</td><td colspan=4></td><td colspan=2 align='right'><b id="totalsum">0</b></td><td colspan=2></td></tr>
<script type="text/javascript">
function delrecord(btn) {/////////
var tr = btn.parentNode.parentNode, tbody = tr.parentNode, rowIndex = tr.rowIndex + 1;
var t = document.getElementById("ftotal" + rowIndex), tt = document.getElementById("totalsum");
var btn = document.getElementById('delbutton' + (rowIndex - 1));
if (btn) btn.disabled = false; //这里将上一个button设置为有效
tbody.removeChild(tr);
}
function chtotal(id) {
var tt = document.getElementById("totalsum");
var q = document.getElementById("fqty" + id);
var p = document.getElementById("fprice" + id);
var t = document.getElementById("ftotal" + id);
if (q.value != '' && p.value != '') {
var old = t.getAttribute('ov');
if (old) old = parseInt(old); else old = 0;
t.value = q.value * p.value;
t.setAttribute('ov', t.value);
tt.innerHTML = parseInt(tt.innerHTML) + parseInt(t.value) - old;
}
}
</script>
</tbody>
</table>
</html>
<html>
<head>
<title></title>
<script type="text/javascript">
function deleteAll(obj) {
var checked = document.getElementsByName(obj);
//将要删除的行保存于数组
var delTrsArr = [];
for (var i = 0; i < checked.length; i++) {
if (checked[i].checked) {
delTrsArr.push(checked[i].parentNode.parentNode);
//将总统计值减去本行的统计值
var currTotal = document.getElementById("ftotal" + (i + 1)).value == "" ? 0 : parseFloat(document.getElementById("ftotal" + (i + 1)).value);
var totalsum = document.getElementById("totalsum");
totalsum.innerHTML = parseFloat(totalsum.innerHTML) - currTotal;
}
}
//没有要删除的行, 提示一下
if (delTrsArr.length == 0) {
alert("Please select items.");
return;
}
//删除数组中的行。 分开处理, 免得纠缠不清。逻辑复杂了,就会容易出错
for (var i = 0, len = delTrsArr.length; i < len; i++) {
delTrsArr[i].parentNode.removeChild(delTrsArr[i]);
}
}
function check_all(obj) {
for (i = 0; i < document.getElementsByName("c").length; i++) {
document.getElementsByName("c")[i].checked = obj.checked;
}
}
function delrecord(btn) {
var tr = btn.parentNode.parentNode, tbody = tr.parentNode, rowIndex = tr.rowIndex + 1;
var t = document.getElementById("ftotal" + rowIndex), tt = document.getElementById("totalsum");
var btn = document.getElementById('delbutton' + (rowIndex - 1));
if (btn) btn.disabled = false; //这里将上一个button设置为有效
tbody.removeChild(tr);
}
function chtotal(id) {
var tt = document.getElementById("totalsum");
var q = document.getElementById("fqty" + id);
var p = document.getElementById("fprice" + id);
var t = document.getElementById("ftotal" + id);
if (q.value != '' && p.value != '') {
var old = t.getAttribute('ov');
if (old) old = parseInt(old); else old = 0;
t.value = q.value * p.value;
t.setAttribute('ov', t.value);
tt.innerHTML = parseInt(tt.innerHTML) + parseInt(t.value) - old;
}
}
</script>
</head>
<body>
<table width="960" border="0" cellspacing="0" cellpadding="0" class="tb" id="tlist">
<thead>
<tr>
<td width="150">
<input type="checkbox" name="checkall" onclick="check_all(this)" />Select All / Clear All
</td>
<td width="150">
  ITEM NO
</td>
<td width="360">
                           
    ITEM DESCRIPTION
</td>
<td width="100">
        QTY
</td>
<td width="100">
         PRICE
</td>
<td width="100">
        TOTAL
</td>
</tr>
</thead>
<tbody>
<tr>
<td align="center" width="110">
<input type="checkbox" name="c" />
</td>
<td align="center" width="100">
<input type="text" id="fno1" name="fno1" size="32" value="001" />
</td>
<td align="center" width="360">
<input type="text" size="30" value="television" />
</td>
<td align="center" width="130">
<input type="text" id="fqty1" name="fqty1" size="7" maxlength="7" value='250' onchange='chtotal(1);' />
</td>
<td align="center" width="130">
<input type="text" id="fprice1" name="fprice1" size="6" maxlength="6" value='0' onchange='chtotal(1);' />
</td>
<td align="center" width="130">
<input type="text" id="ftotal1" name="ftotal1" size="8" readonly />
</td>
</tr>
<tr>
<td align="center" width="110">
<input type="checkbox" name="c" />
</td>
<td align="center" width="100">
<input type="text" id="fno2" name="fno2" size="32" value="002" />
</td>
<td align="center" width="360">
<input type="text" size="30" value="radio" />
</td>
<td align="center" width="130">
<input type="text" id="fqty2" name="fqty2" size="7" maxlength="7" value='120' onchange='chtotal(2);' />
</td>
<td align="center" width="130">
<input type="text" id="fprice2" name="fprice2" size="6" maxlength="6" value='0' onchange='chtotal(2);' />
</td>
<td align="center" width="130">
<input type="text" id="ftotal2" name="ftotal2" size="8" readonly />
</td>
</tr>
<tr>
<td align="center" width="110">
<input type="checkbox" name="c" />
</td>
<td align="center" width="100">
<input type="text" id="fno3" name="fno3" size="32" value="003"/>
</td>
<td align="center" width="360">
<input type="text" size="30" value="display"/>
</td>
<td align="center" width="130">
<input type="text" id="fqty3" name="fqty3" size="7" maxlength="7" value='400' onchange='chtotal(3);'/>
</td>
<td align="center" width="130">
<input type="text" id="fprice3" name="fprice3" size="6" maxlength="6" value='0' onchange='chtotal(3);'/>
</td>
<td align="center" width="130">
<input type="text" id="ftotal3" name="ftotal3" size="8" readonly/>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="6" >
<input type="button" name="delete_button" value="Delete" onclick="deleteAll('c');"/>
</td>
</tr>
<tr class="totalsum">
<td>
Total
</td>
<td colspan="4">
</td>
<td colspan="2" align='right'>
<b id="totalsum">0</b>
</td>
<td colspan="2">
</td>
</tr>
</tfoot>
</table>
</body>
</html>