Javascript &引用;“未定义”不是对象;尝试在HTML中引用单元格时

Javascript &引用;“未定义”不是对象;尝试在HTML中引用单元格时,javascript,html,script,Javascript,Html,Script,我试图用网站上用户的数据制作一个表格。我添加了删除行的选项,但出现了一个错误 “undefined不是对象(正在计算‘table.rows[i].cells[3]”) 如果我使用固定的表,我的代码可以工作,但是使用使表可编辑的脚本无法工作,以下是我的代码: 删除HTML表中选定的行 td:last child{背景色:#F00;颜色:#FFF;光标:指针; 字体大小:粗体;文本装饰:下划线} 名字 姓 年龄 删除 名字: 姓氏: 年龄: 添加 var rIndex, table=docume

我试图用网站上用户的数据制作一个表格。我添加了删除行的选项,但出现了一个错误

“undefined不是对象(正在计算‘table.rows[i].cells[3]”)

如果我使用固定的表,我的代码可以工作,但是使用使表可编辑的脚本无法工作,以下是我的代码:


删除HTML表中选定的行
td:last child{背景色:#F00;颜色:#FFF;光标:指针;
字体大小:粗体;文本装饰:下划线}
名字
姓
年龄
删除
名字:
姓氏:
年龄:
添加
var rIndex,
table=document.getElementById(“table”);
//检查空输入
函数checkEmptyInput()
{
var isEmpty=false,
fname=document.getElementById(“fname”).value,
lname=document.getElementById(“lname”).value,
年龄=document.getElementById(“年龄”).value;
如果(fname==“”){
警告(“名字不能为空”);
isEmpty=true;
}
else if(lname==“”){
警告(“姓氏不能为空”);
isEmpty=true;
}
否则如果(年龄==“”){
警惕(“年龄不能为空”);
isEmpty=true;
}
返回是空的;
}
//添加行
函数addHtmlTableRow()
{
//通过id获取表格
//创建新行和单元格
//从输入文本中获取值
//将值设置为行单元格的
如果(!checkEmptyInput()){
var newRow=table.insertRow(table.length),
cell1=newRow.insertCell(0),
cell2=newRow.insertCell(1),
cell3=newRow.insertCell(2),
cell4=newRow.insertCell(3),
fname=document.getElementById(“fname”).value,
lname=document.getElementById(“lname”).value,
年龄=document.getElementById(“年龄”).value,
edit=“编辑”
cell1.innerHTML=fname;
cell2.innerHTML=lname;
cell3.innerHTML=年龄;
cell4.innerHTML=编辑;
//调用函数将事件设置为新行
选择RowtoInput();
}
}
//将选定行数据显示为输入文本
函数selectedRowToInput()
{
对于(变量i=1;i
Javascript中的数组从0开始。在您的示例中,这意味着:

- rows[0] = Header row
- rows[1] = First data row
- rows[2] = Second data row
等等。您的
for
循环开始计数1

因此,您的
for
循环尝试访问表中的第二行,但当页面第一次加载时,该行不包含任何单元格


这就是脚本说
未定义不是对象的原因。for循环将尝试访问
行[1]。单元格[3]
行[1]
没有任何单元格。因此,您试图访问一个不存在的单元格。

基本上,在循环的第一次迭代中,尝试访问第三个不存在的单元格

<table id="table" border="1">
                    <tr>        
                        <th>First Name</th>
                        <th>Last Name</th>
                        <th>Age</th>
                        <th>Delete</th>
                    </tr>
         
                    <tr>
                       <!-- there is no cell --> 
                    </tr>
                    
                </table>

名字
姓
年龄
删除
因此,将显示未定义的错误

您可以删除它,因为它没有任何用处

您应该在向表中插入一些数据后执行循环。 只需将循环包装在一个条件中。(如果删除
,则我们的条件应为table.rows.length>1

if(table.rows.length>2){
对于(变量i=1;i    if(table.rows.length > 2){
           for(var i = 1; i < table.rows.length; i++)
                    {
                        table.rows[i].cells[3].onclick = function() 
                        {
                            var c = confirm("do you want to delete this row");
                            if(c === true)
                            {
                                index = this.parentElement.rowIndex;
                                table.deleteRow(index);
                            }
                            
                            //console.log(index);
                        };
                        
                    }
}
    
document.addEventListener('click',function(e){
if(e.target){
      //do something
   }
});