Javascript 未捕获的TypeError:无法设置属性

Javascript 未捕获的TypeError:无法设置属性,javascript,Javascript,我很困惑到底为什么它会返回一个错误 未捕获的TypeError:无法将属性“outerHTML”设置为null 在delete_行(table_script.js:10) 在HTMLInputElement.onclick(table.html:1)` 有人能帮我确定如何修复错误吗 我的代码: var-temp\u图像; var temp_标题; 变量温度描述; 函数删除_行(否){ 如果(确认(“您确定要删除吗?”)){ document.getElementById(“行”+no+”).o

我很困惑到底为什么它会返回一个错误

未捕获的TypeError:无法将属性“outerHTML”设置为null
在delete_行(table_script.js:10)
在HTMLInputElement.onclick(table.html:1)`

有人能帮我确定如何修复错误吗

我的代码:

var-temp\u图像;
var temp_标题;
变量温度描述;
函数删除_行(否){
如果(确认(“您确定要删除吗?”)){
document.getElementById(“行”+no+”).outerHTML=“”;
}否则
警报(“数据未删除”);
}
函数add(){
var new_image=document.getElementById(“new_image”).value;
var new_title=document.getElementById(“new_title”).value;
var new_description=document.getElementById(“new_description”).value;
if(临时图像和临时描述和临时标题!=null){
警报(“你好世界”);
}else if(新图片和新标题和新描述!=“”){
var table=document.getElementById(“数据表”);
var table_len=(table.rows.length)-1;
变量行=table.insertRow(table_len).outerHTML=
“”+新标题+
“+新描述+”;
document.getElementById(“新图像”).value=“”;
document.getElementById(“新标题”).value=“”;
document.getElementById(“新描述”).value=“”;
}
}

图像链接
标题
描述

当您使用
onclick='delete_row(this);'时,会出现一个错误传递对象
,而不是行号

相反,您可以尝试这样的方法,在哪里找到
tr
并删除它,例如

function delete_row(el)
{
    if (confirm("Are you sure you want to delete?")) {
        el.closest('tr').remove();
    } else 
        alert("Data is not deleted");
}

如果要保留现有的删除功能,请将
onlick
更改为此

onclick='delete_row(" + table_len + ");'
我仍然推荐第一个建议,因为使用
.outerHTML
删除元素的可读性不是很强

或者您可以这样做,使用
onclick='delete_row(“+table_len+”)

function delete_row(no)
{
    if (confirm("Are you sure you want to delete?")) {
        document.getElementById("row" + no).parentNode.remove();
    } else 
        alert("Data is not deleted");
}


更新,删除我的第二个建议

多亏了,使用现有解决方案可能会引起回击,原因是您正在使用
(table.rows.length)-1
获取
id


它可能造成的问题是,您最终得到两行具有相同的
id

当您使用
onclick='delete_row(this);'时,会出现一个错误传递对象
,而不是行号

相反,您可以尝试这样的方法,在哪里找到
tr
并删除它,例如

function delete_row(el)
{
    if (confirm("Are you sure you want to delete?")) {
        el.closest('tr').remove();
    } else 
        alert("Data is not deleted");
}

如果要保留现有的删除功能,请将
onlick
更改为此

onclick='delete_row(" + table_len + ");'
我仍然推荐第一个建议,因为使用
.outerHTML
删除元素的可读性不是很强

或者您可以这样做,使用
onclick='delete_row(“+table_len+”)

function delete_row(no)
{
    if (confirm("Are you sure you want to delete?")) {
        document.getElementById("row" + no).parentNode.remove();
    } else 
        alert("Data is not deleted");
}


更新,删除我的第二个建议

多亏了,使用现有解决方案可能会引起回击,原因是您正在使用
(table.rows.length)-1
获取
id


它可能造成的问题是,您最终有两行具有相同的
id

请改进您的代码并提供运行的fiddle请改进您的代码并提供运行的fiddle HTML元素中是否存在最近的fiddle?或者您指的是jQuery的closestas,因为我将代码更改为
onclick='delete_行(“+table_len+”),这)
它只会删除imgtag@Rajesh否,到javascript
closest()
@hazy好吧,你不能改变它然后使用我更新的函数。保持你的
onclick
原样
onclick='delete_行(“+table_len+”)第二个建议可能会导致问题。就像有人在添加两行一样,表将具有id
row1
row2
。然后删除第一行。所以只剩下一行id
row2
,现在再次添加新行,然后它将添加id
row2
。因此将有两个元素具有相同的id
row2
<代码>文档。getElementById
选择器将始终选择第一个
行2
元素并将其删除。HTML元素中是否存在最接近的元素?或者您指的是jQuery的closestas,因为我将代码更改为
onclick='delete_行(“+table_len+”),这)
它只会删除imgtag@Rajesh否,到javascript
closest()
@hazy好吧,你不能改变它然后使用我更新的函数。保持你的
onclick
原样
onclick='delete_行(“+table_len+”)第二个建议可能会导致问题。就像有人在添加两行一样,表将具有id
row1
row2
。然后删除第一行。所以只剩下一行id
row2
,现在再次添加新行,然后它将添加id
row2
。因此将有两个元素具有相同的id
row2
<代码>文档。getElementById
选择器将始终选择第一个
行2
元素并将其删除。