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
テーブルのinnerHTMLに値を設定することはできません。子のセルまたは行にアクセスして、次のように変更する必要があります。
document.getElementById(tabid).rows[0].cells.innerHTML = 'blah blah';
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ミリ秒の終わりに呼び出された関数がスパンのinnerHTMLを置き換えるように、タイマーイベントを250ミリ秒に設定することで問題を解決しました。
IE8では、COL、COLGROUP、FRAMESET、HEAD、HTML、STYLE、TABLE、TBODY、TFOOT、THEAD、TITLE、TRなどの要素が読み取り専用であることがわかりました。
したがって、これらの要素にinnerHTMLを設定しようとすると、IE8はUnknown RuntimeErrorでalterに通知します。
詳細はこちら: http://msdn.Microsoft.com/en-us/library/ms533897%28VS.85%29.aspx 。
最も簡単な方法は、読み取り専用要素をdiv要素に変換することです。
同じ問題が発生しましたが、次のようにp
要素のすぐ下にp
タグを挿入していたためにエラーが発生しました。
document.getElementById('p-element').innerHTML = '<p>some description</p>';
これがHTML形式のエラーであるかどうかはわかりません。別のIE8のバグのようです。
素晴らしい、私はinnerHTML
を設定するのと同じ状況にありました。これを読んだとき、要素の1つがTR
であり、もう1つがTD
であり、TD
が機能していることに気付きました。
両方がTD
sになるようにコードを変更すると、コードが修正されます。つまり、テーブルの構造が原因で発生する、かなり非自明な問題です。
おそらく、テーブルを配列として格納できなくなったため、テーブルの行を変更し始めるとDOMが正しくスローされません。
DOMがオンザフライで変更されることは珍しくなく、これがテーブルに対してのみエラーをスローするのは奇妙に思えるので、IEはより有益なエラーメッセージを表示できると確信しています。
そうそう、HTML構造が有効でなければならないことを忘れないでください。
ページ全体を<p>
タグにロードしようとしましたが、(明らかに)失敗し、<div>
タグに変更すると問題が解決しました!
したがって、HTML構造を覚えておいてください。
InnerHTMLを ""(空の文字列)に設定する必要がある場合は、代わりにremoveChildを使用できます
YUIを使用する場合は、
Y.one('#'+data.id).setContent(html);
の代わりに:
Y.one('#'+data.id).set('innerHTML' , html);
iEで起こった理由...
ケースシナリオ:
Div内のDivにアクセスしてajaxコンテンツを追加しているときに、IEでJavascriptの不明なランタイムエラーが発生しました。
解決:
フォームタグの間にネストされたdivを配置して、コンテンツを再生しないでください.. :)