17
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

4

10 回答 10

15

您不能为表格的 innerHTML 设置值,您应该访问子单元格或行并像这样更改它们:

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

有关更多信息/示例:Table、TableHeader、TableRow、TableData 对象

于 2009-02-17T09:02:04.583 回答
13

在 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。

于 2010-11-03T03:42:59.620 回答
8

我发现在 IE8 中某些元素是只读的:COL、COLGROUP、FRAMESET、HEAD、HTML、STYLE、TABLE、TBODY、TFOOT、THEAD、TITLE、TR。

因此,如果您尝试为这些元素设置 innerHTML,IE8 会使用 Unknown Runtime Error 通知 alter。

更多细节在这里:http: //msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx

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

于 2011-02-09T10:06:46.953 回答
3

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

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

我真的不明白这是 HTML 格式错误;似乎更像是另一个 IE8 错误。

于 2010-12-08T21:22:03.210 回答
2

太好了,我在设置innerHTML. 当我读到这篇文章时,我意识到其中一个元素是 aTR并且一个是 aTD并且TD正在工作。

更改代码以使它们都可以TD修复它,这意味着这是由表结构引起的一个相当不明显的问题。

据推测,当我开始更改表行时,它会使 DOM 出错,因为它不能再将表存储为数组。

我确信 IE 可以提供更多信息的错误消息,因为 DOM 动态更改并不少见,而且这只会引发表错误似乎很奇怪。

于 2010-11-23T22:53:08.873 回答
1

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

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

所以记住 HTML 结构!

于 2011-01-07T14:29:47.423 回答
0

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

案例场景:

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

解决方案:

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

于 2011-02-11T23:20:06.430 回答
0

使用 YUI 时尝试使用

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

代替:

Y.one('#'+data.id).set('innerHTML' , html);
于 2012-02-09T15:48:53.967 回答
0

如果您需要将 innerHTML 设置为 "" (空字符串),那么您可以使用 removeChild

于 2013-07-01T16:27:47.903 回答
-1

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

  • SwapnilK
于 2009-06-22T18:51:10.287 回答