调试IE8 Javascript替换innerHTML运行时错误

时间:2009-02-17 08:42:13

标签: javascript debugging innerhtml

function DeleteData(ID)
{
 var ctrlId=ID.id;

 var divcontents=document.getElementById(ctrlId).innerHTML;
 var tabid=ctrlId.replace(/div/,'tab');
 var tabcontents=document.getElementById(tabid).innerHTML;
 alert(document.getElementById(tabid).innerHTML);
 document.getElementById(tabid).innerHTML="<TBody><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr></TBody>";
 document.getElementById(ctrlId).innerHTML='';

}

我正在尝试用空表替换表,但

document.getElementById(tabid).innerHTML="<TBody><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr></TBody>";

此行导致Unknown Runtime Error

10 个答案:

答案 0 :(得分:15)

您无法将值设置为表的innerHTML,您应该访问子单元格或行并更改它们:

document.getElementById(tabid).rows[0].cells.innerHTML = 'blah blah';

更多信息/示例:Table, TableHeader, TableRow, TableData Objects

答案 1 :(得分:14)

在IE8中,当尝试从对象内部触发的代码时,您无法更改对象的innerHTML。

例如:

<span id='n1'>
  <input type=button value='test' onclick='DoSomething(this);'>
</span>

将以下代码藏在文档的某个偏远角落:

<script type='text/javascript'>
  function DoSomething(element)
  {
    document.getElementById("n1").innerHTML = "This is a test"
  }
</script>

这将失败并显示错误未知运行时错误。我认为这与您尝试替换触发当前执行行的HTML代码有关。 onclick事件是由DoSomething函数替换的代码的一部分。 IE8不喜欢这样。

我通过设置250毫秒的计时器事件来解决我的问题,这样在250毫秒结束时调用的函数将替换span的innerHTML。

答案 2 :(得分:8)

我发现IE8中有一些元素是readonly:COL,COLGROUP,FRAMESET,HEAD,HTML,STYLE,TABLE,TBODY,TFOOT,THEAD,TITLE,TR。

因此,如果您尝试为这些元素设置innerHTML,IE8会通过未知运行时错误通知alter。

此处有更多详情:http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx

最简单的方法是将只读元素转换为div元素。

答案 3 :(得分:3)

我遇到了同样的问题,但我的错误是因为我在p元素下直接插入了p标记,如下所示:

document.getElementById('p-element').innerHTML = '<p>some description</p>';

我真的没看到这是HTML格式错误;看起来更像是IE8的另一个bug。

答案 4 :(得分:2)

很好,我设置innerHTML的情况与此相同。当我读到这篇文章时,我意识到其中一个元素是TR,一个是TD,而TD正在运作。

更改代码以便它们都是TD修复它,这意味着它是由表结构引起的一个非常明显的问题。

当我开始更改表行时,可能会抛出DOM错误,因为它不能再将表存储为数组。

我确信IE可以提供更多信息性的错误消息,因为DOM在动态变化时并不常见,这似乎很奇怪,这只会给表格带来错误。

答案 5 :(得分:1)

哦,是的 - 记住HTML结构必须有效。

我尝试将整个页面加载到<p>标记中 - 它显然失败了(显然),将其更改为<div>标记解决了我的问题!

请记住HTML结构!

答案 6 :(得分:0)

为什么它会在IE中发生...

案例场景:

在访问Div内部的Div以添加ajax内容时,IE中的Javascript未知运行时错误。

溶液:

不要在表单标签之间放置嵌套的div来播放内容..:)

答案 7 :(得分:0)

使用YUI时尝试使用

Y.one('#'+data.id).setContent(html); 

而不是:

Y.one('#'+data.id).set('innerHTML' , html);

答案 8 :(得分:0)

如果你需要将innerHTML设置为“”(空字符串),那么你可以使用removeChild代替

答案 9 :(得分:-1)

这不是一个大问题,因为我前几天遇到了同样的问题以及这个错误的原因 发生在ie中 - 我们的html格式中存在错误,或者您使用<td>以外的元素来替换innerHTML,即仅使用,不要使用table,div来替换innerHTML。

  • SwapnilK