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
答案 0 :(得分:15)
您无法将值设置为表的innerHTML,您应该访问子单元格或行并更改它们:
document.getElementById(tabid).rows[0].cells.innerHTML = 'blah blah';
答案 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。