change_layer: document.all[...] ist Null oder ist kein Objekt
Nigoooh
- javascript
0 Struppi
Halloele,
ich habe eine ganz schnuffige Seite mit so einigen java script funktionen. So wird zum beispiel ein <select> automatisch mit options gefuellt wenn irgendow anders etwas ausgewaehlt wird. das funktionierte ganz prima. nun habe ich cookies ins spiel gebracht. diese werden von dem target des formulars geschrieben. wenn ich nun wieder auf dieses suchformular komme, schreibt die jsp all diese parameter in den javascript header. das klappt soweit prima. die <select> wird auch entsprechend gefuellt und ein eintrag markiert.
nun will ich unten anzeigen, was gewaehlt wurde (Ihr gewählter dienst: ...). Dazu habe ich eine function change_layer(layer_name, value). Die Funktion klappt au soweit. Nur eben beim Aufruf von:
change_layer("zielgebiet", "lalala");
kommt diese bescheuerte ie fehlermeldung (document.all[...] ist Null oder ist kein Objekt).
Die function change_layer(param1, param2):
function change_layer(layer, value)
{
IE=0;
NS4=0;
NS6=0;
if (navigator.appName.indexOf('Netscape')!=-1 && parseInt(navigator.appVersion)<5) {NS4=1;}
if (navigator.appName.indexOf('Netscape')!=-1 && parseInt(navigator.appVersion)>4.9) {NS6=1;}
if (navigator.appName.indexOf('Microsoft')!=-1 && parseInt(navigator.appVersion)>3) {IE=1;}
if (IE==true)
{
document.all['IE_'+layer].innerHTML=value;
}
if (NS4)
{
eval('var echoecho = document.layers.NS_'+layer+'.document;');
echoecho.open();
echoecho.write(value);
echoecho.close();
}
if (NS6)
{
document.getElementById('NS_'+layer).innerHTML =value;
}
}
P.S.: Es gibt keine Fehler wenn ich rumklicke und somit diese Funktion weiterhin nutze, nur beim erstmaligen Ldaen kommt der Fehler.
Danke.
Gruesse,
der Nigoooh
kommt diese bescheuerte ie fehlermeldung (document.all[...] ist Null oder ist kein Objekt).
document.all ist IE 4.0 also komplett veraltet. Informationen über das aktuelle DOM findest du hier http://www.netzwelt.com/selfhtml/dhtml/index.htm
Die function change_layer(param1, param2):
function change_layer(layer, value)
{
IE=0;
NS4=0;
NS6=0;
if (navigator.appName.indexOf('Netscape')!=-1 && parseInt(navigator.appVersion)<5) {NS4=1;}
if (navigator.appName.indexOf('Netscape')!=-1 && parseInt(navigator.appVersion)>4.9) {NS6=1;}
if (navigator.appName.indexOf('Microsoft')!=-1 && parseInt(navigator.appVersion)>3) {IE=1;}
Diese Prüfung ist sinnlos, da der Name eines Browsers keinerlei Rückschlüsse über dessen Fähigkeiten zuläßt. Warum überprüfst du nicht einfach auf das was du benutzen willst?
if (IE==true)
{
document.all['IE_'+layer].innerHTML=value;
}
if (NS4)
{
eval('var echoecho = document.layers.NS_'+layer+'.document;');
echoecho.open();
echoecho.write(value);
echoecho.close();
}
if (NS6)
{
document.getElementById('NS_'+layer).innerHTML =value;
}
}
Also:
if(document.getElementById)
document.getElementById(layer).innerHTML = value;
else if(document.layers)
{
var obj = document.layers[layer].document;
obj.open();
obj.write(value);
obj.close();
}
else if(document.all) documnet.all[layer].innerHTML = value;
eine Unterscheidung zwischen IE/NS ist nicht erforderlich, normalerweise.
eval ist in diesem (wie in 99.999% aller Fälle wo es eingesetzt wird) nicht nötig, Fehleranfällig, langsam und erschwert das debuggen.
Warum aber dien Fehler auftritt läßt sich so nicht sagen.
Du solltest überprüfen, was du nutzt. im obigen Beispiel:
var obj = null;
if(document.all) obj = document.all[layer];
....[usw.]
if(!obj) return alert('Fehler!\n\nLayer:' + layer + ' nicht gefunden');
Struppi.