2009-07-08 5 views
0

Ich versuche document.getElementById(). InnerHTML in einem JavaScript zu verwenden, um Informationen in einer Webseite zu ändern. Bei FireFox funktioniert dies wie in der W3C-Dokumentation beschrieben, die gleiche Methode gibt jedoch 'Unbekannter Fehler' in IE zurück. Das JavaScript sieht wie folgt aus:document.getElementById(). InnerHTML schlägt mit 'Unbekannter Fehler' in IE

function Change_Info (ID, ROW, VALUE) 
{ 
    if (document.getElementById) 
    { 
     var ntext = "<td width=4\% bgcolor=#FFFFFF>&nbsp;</td><td width=92\% bgcolor=#FFFFFF colspan=2><font face=Arial size=2 color=#5578C4>" + VALUE + "</font></td><td width=4\% bgcolor=#FFFFFF><center>&nbsp</center></td>"; 
     document.getElementById(ID + "-" + ROW).innerHTML = ntext; 
     return false; 
    } 
} 

Das Skript wird von einem Mouseover-Ereignis wie folgt aufgerufen:

onmouseover='Change_Info("thetag","1","Some Info"); 

Das Skript würde ID mit einem kombinieren - und dann ROW, die in diesem Beispiel wäre , thetag-1. Das genaue Tag existiert im HTML-Dokument. Wenn getElementById mit dem hartcodierten Tag-Namen verwendet wird, wird derselbe Fehler angezeigt, und in dieser Situation wird die variable Methode bevorzugt.

Um Fragen bezüglich warum vollständige HTML-Tabelle Informationen in ntext sind, aus welchem ​​Grunde verschachtelten IDs nicht auf sowohl FireFox und IE, obwohl die W3C-Spezifikation besagt, sollte es funktionieren (natürlich haben beiden Browser nicht vollständig die W3C-Spezifikationen implimented als persceribed). Wenn jemand weiß, wie man auf geschachtelte IDs zugreifen und diese ändern kann, das funktioniert sowohl in FireFox als auch in IE, würde ich es gerne wissen.

Darüber hinaus bekomme ich nur noch diese 'Unbekannter Fehler' im IE bei der Verwendung von innerHTML zu ändern Sie die Informationen. Lesen funktioniert ohne Fehler.

Kann jemand darauf hinweisen, wo mein Scripting-Fehler ist, so dass ich Text "Nachrichten" bei Mouseover-Ereignissen austauschen kann.

+1

Haben Sie jQuery versucht mit, dies zu tun Es ist zu abstrakt soll die Browser-Inkompatibilitäten für Sie weg –

+0

Ihre HTML. Markup ist ziemlich veraltet, Sie verwenden abgeschriebene Tags und Markup. – epascarello

Antwort

2

IE nicht Sie add.alter Tabellenzeilen, die Art und Weise nicht lassen. Sie müssen die DOM-Methoden removeChild, appendChild und createElement ODER insertRow und insertCell verwenden

0

wie mit dem ntext- loszuwerden, Sie so etwas wie

document.getElementById tun könnte (ID + '-' + ROW) .getElementsByTagName ('font') [0] .innerHTML = WERT;

Wenn es der getElementById-Teil ist, der nicht funktioniert, werden Sie immer noch Pech haben. Versuchen Sie:

var test = document.getElementById (ID + '-' + ROW);

Alarm (Test);

Um herauszufinden, ob das Objekt selbst gefunden wird, wie, um herauszufinden, ob ein Fehler, wenn es darum, weil Sie innerHTML- auf einen Null-Fehler zugreifen möchten, oder wenn es innerHTML- Einstellung eigentlich ist das nicht der Fall ist Arbeit. Letzteres scheint mir wahrscheinlich, in welchem ​​Fall die vorgeschlagene Lösung helfen könnte.

0

Bitte geben Sie jQuery eine Chance. Es abstrahiert sehr schön die Idiosynkrasien des Browsers. Download neueste jquery von jQuery-Site und Folgendes ausreichen:

<script type="text/javascript" src="path/to/jquery"></script> 


<script type="text/javascript"> 
function Change_Info (ID, ROW, VALUE) 
{ 
    if (document.getElementById) 
    { 
    var ntext = "<td width=4\% bgcolor=#FFFFFF> </td><td width=92\% 
     bgcolor=#FFFFFF colspan=2><font face=Arial size=2 color=#5578C4>"+ VALUE+ 
     "</font></td><td width=4\% bgcolor=#FFFFFF><center>&nbsp</center></td>"; 

    $("#" + ID + "-" + ROW).html(ntext); 

    return false; 
} 
</script> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("# ID OF YOUR ELEMENT").mouseover(function(){ 
       Change_Info("thetag","1","Some Info"); 
     }); 
    }); 
</script> 
1

"Außerdem bekomme ich bis jetzt nur diesen 'Unbekannten Fehler' im IE, wenn ich innerHTML zum Ändern der Informationen verwende. Lesen funktioniert ohne Fehler ."

ich das gleiche Problem konfrontiert und verwendet, um die folgenden:

var newdiv = document.createElement("div"); 
newdiv.innerHTML = "new content"; 
var container = document.getElementById("container"); 
container.removeChild(container.firstChild); 
container.appendChild(newdiv); 

http://domscripting.com/blog/display/99

Verwandte Themen