web-dev-qa-db-ja.com

IE8Javascriptのデバッグ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

17
SandHurst

テーブルのinnerHTMLに値を設定することはできません。子のセルまたは行にアクセスして、次のように変更する必要があります。

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

詳細/例: Table、TableHeader、TableRow、TableData Objects

15
Canavar

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ミリ秒に設定することで問題を解決しました。

14
Paul

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要素に変換することです。

8
Giulio Roggero

同じ問題が発生しましたが、次のようにp要素のすぐ下にpタグを挿入していたためにエラーが発生しました。

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

これがHTML形式のエラーであるかどうかはわかりません。別のIE8のバグのようです。

3
Boubacar

素晴らしい、私はinnerHTMLを設定するのと同じ状況にありました。これを読んだとき、要素の1つがTRであり、もう1つがTDであり、TDが機能していることに気付きました。

両方がTDsになるようにコードを変更すると、コードが修正されます。つまり、テーブルの構造が原因で発生する、かなり非自明な問題です。

おそらく、テーブルを配列として格納できなくなったため、テーブルの行を変更し始めるとDOMが正しくスローされません。

DOMがオンザフライで変更されることは珍しくなく、これがテーブルに対してのみエラーをスローするのは奇妙に思えるので、IEはより有益なエラーメッセージを表示できると確信しています。

2
Theo

そうそう、HTML構造が有効でなければならないことを忘れないでください。

ページ全体を<p>タグにロードしようとしましたが、(明らかに)失敗し、<div>タグに変更すると問題が解決しました!

したがって、HTML構造を覚えておいてください。

1
aliceraunsbaek

InnerHTMLを ""(空の文字列)に設定する必要がある場合は、代わりにremoveChildを使用できます

0
Fulg

YUIを使用する場合は、

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

の代わりに:

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

iEで起こった理由...

ケースシナリオ:

Div内のDivにアクセスしてajaxコンテンツを追加しているときに、IEでJavascriptの不明なランタイムエラーが発生しました。

解決:

フォームタグの間にネストされたdivを配置して、コンテンツを再生しないでください.. :)

0
musmanjaved