deerlu 2009-05-30 17:17
浏览 226
已采纳

javascript 的一个问题.........................

正在学习js,遇到一个问题:
    用js代码向table添加一行后,无法取得文本框的值,代码如下:
HTML代码:


<table id = "myTable" border="1" width="40%" bordercolor="#BCD2EE" cellpadding="0" cellSpacing="0" align="center">
<tr>
<td>
<input type="text" name="file" id="file0" value="" size="100"/>
</td>
</tr>
<tr>
<td>
<div align="right" >
<input type="button" name="addRow" id="addRow" value="addRow" onclick="addRow('myTable')"/>
</div>
</td>
</tr>
</table>

js代码如下:

function addRow(myTable){
var objTable = document.getElementById(myTable);
var rowLength = objTable.rows.length;
var newRow = objTable.insertRow(rowLength-1);//insert before 'rowLength-1'
var newCell = newRow.insertCell(0);
var fileId = rowLength-newRow.rowIndex-1
//var txt = "<input type='text'"+" name='file"+ fileId + "'" + "id ='file" +fileId+ "'" + " value='' size='100'/>"
var txt = "<input type='text'"+" name='file' id ='file" +fileId+ "'" + " value='' size='100'/>"
newCell.innerHTML =txt;
//alert(document.getElementById("file"+fileId).value);
//alert(rowLength);
}

function getTable(){
var objIdex;
var objInput = document.getElementsByName("file");
for(objIndex in objInput){

    //alert(objInput[objIndex].value);
    //alert(objIndex);
    //alert(objInput[objIndex]);
    if(isNaN(objInput[objIndex])){
        alert(objInput[objIndex]);
        //objInput[objIndex].value = "";
    }
}



老是提示没有定义或是没有反映,而用下面的方法却能得到:

for (var i=0;i<objInput.length;i++){
alert(objInput[i].value);
}


for .... in 上面这种循环有上面区别?????
问题补充
我试了,在IE下显示length、file、file,在Firefox下显示了你所说的内容。
谢谢,明白了对DOM又有了新的认识!!!
  • 写回答

7条回答 默认 最新

  • darktalker 2009-05-30 17:17
    关注

    当你使用
    [code="javascript"]
    alert(objIndex)
    [/code]
    进行DEBUG的时候,你会发现你列出的还包括了DOM以外的Array.prototype元素,因为一个DOM QUERY里,比如document.getElementsByTagName, 还包含了下列元素:
    length, item, namedItem, 其中item和namedItem是函数,length是给出的DOM元素的个数,也就是一个DOM QUERY的格式是这样的:
    [code="javascript"]
    {
    “0”:{
    //第一个检索出的TAG == 'file'的所有DOM元素
    },
    length:1,
    item:function(){//内嵌函数item},
    namedItem:function(){//内嵌函数namedItemneiq}
    }
    [/code]
    你在for(var i=0;i<l;i++){} 里是无法获得数组以外的元素的,所以推荐你不要用for(var x in xx){}在DOM检索里

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改