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 ミリ秒の最後に呼び出される関数がスパンの innerHTML を置き換えるようにしました。

于 2010-11-03T03:42:59.620 に答える
8

IE8では、COL、COLGROUP、FRAMESET、HEAD、HTML、STYLE、TABLE、TBODY、TFOOT、THEAD、TITLE、TRなどの要素が読み取り専用であることがわかりました。

したがって、これらの要素にinnerHTMLを設定しようとすると、IE8はUnknownRuntimeErrorで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

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

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

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

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

于 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 に答える
-1

<td>数日前に同じ問題に直面したため、これは大きな問題ではありません。このエラーが発生する理由は、つまり、html 形式にエラーが存在するか、innerHTML を置き換える以外の要素を使用しているためです。つまり、使用しないでください。テーブル、div を使用して innerHTML を置き換えます。

  • スワップニル
于 2009-06-22T18:51:10.287 に答える