`

记JavaScript一低级错误

阅读更多
detail是单元格中5个checkbox的name,表格id="detailTable",表格所在的表单name属性为detailForm。昨天写了这么一段代码来删除选中的checkbox所在的行:

function deleteRows(){
	var rows = document.detailForm.detail;
	var detailTable = document.getElementById("detailTable");
	for(var i=0; i<rows.length; i++){
		if(rows[i].checked){
			detailTable.deleteRow(rows[i].parentNode.parentNode.rowIndex);
			i--;
		}
	}
}


接着我选中了全部的checkbox,点击删除按钮调用deleteRows方法,结果发现进入死循环,好在FireFox3在死循环一小段时间后会弹出个对话框询问是否结束脚本执行。于是我打开FireBug进行调试,发现在删除最后一行的时候,rows.length的值始终是1,i值是0,百思不得其解。于是换到IE下,结果没发现问题。但是在IE下只生成一行checkbox的时候,点删除按钮怎么也删不了。抓狂状态下叫来18同学,看了一会代码,他找出原因了:var rows = document.detailForm.detail;这一行代码出了问题,在只有一个detail的时候,浏览器把它当成一个非数组对象,rows.length的值是undefined,所以detailTable.deleteRow(index)怎么也执行不到。只要把document.detailForm.detail;改成document.getElementsByName("detail");就一切正常了。

ps:不记得之前是因为什么原因,我老是记得FireFox不支持document.getElementsByName(),所以获取dom对象都是用id,不敢用name。18同学给我改代码的时候,我还非常肯定的说:绝对运行不了 ……
分享到:
评论
1 楼 zhangyou1010 2009-09-12  
 

相关推荐

Global site tag (gtag.js) - Google Analytics