Probleme mit document.getelementbyid(...).innerhtml
Basic87
- javascript
der nachfolgende text ist ein auszug aus meinem Programmtext, bei öffnen kommt immer der fehler document.getelementbyid(...) ist Null oder kein Object. kann mir mal jemand sagen woran das liegt bin schon total am verzweifeln.
<script type="text/javascript"> function presse(va, pr, tex){ var p = pr.substr(2, 2); parseInt(p);
var a = "p"+(10 * p); var b = "p"+(10 * p + 1); var c = "p"+(10 * p + 2); var d = "p"+(10 * p + 3); var e = "p"+(10 * p + 4); var f = "p"+(10 * p + 5); var g = "p"+(10 * p + 6); var h = "p"+(10 * p + 7); var i = "p"+(10 * p + 8);
if(va != "0"){ document.write(a); var t = "t" + pr.substr(5, 2); var gr = "g" + pr.substr(8, 5);
var p = parseInt(p); p = p + 1; var pr1;
var alpha; var beta;
var design = "d" + p; if(va == 1){ document.getElementById(a).innerHTML="<br><textarea name=""+t+"" id=""+t+"" rows="20" cols="55">"+tex+"</textarea><span style="vertical-align: 1500%"> <input name=""+gr+"" type="file" size="20"></span>"; alpha = t.substr(1, 2); alpha = parseInt(alpha) + 1; t = "t" + alpha; beta = gr.substr(1, 2); beta = parseInt(beta) +1; gr = "g" + beta; t1 = t.substr(1, 2); g1 = gr.substr(1, 2); pr1 = "pr"+p+""+t1+""+g1; document.getElementById(b).innerHTML="<br><select onchange="presse(value, name);" name=""+pr1+""><option value="0">Design auswählen</option><option value="1">Text, Bild</option><option value="2">Bild, Text</option><option value="3">Text</option><option value="4">Bild</option><option value="5">Bild, Bild</option><option value="6">Bild, Bild, Bild</option></select><input type="hidden" name=""+design+"" value="1">"; }
if(va == 2){ document.write(a); document.getElementById(a).innerHTML="<br><span style="vertical-align: 1500%"><input name=""+gr+"" type="file" size="20"> </span><textarea name=""+t+"" id=""+t+"" rows="20" cols="55">"+tex+"</textarea>"; beta = gr.substr(1, 2); beta = parseInt(beta) +1; gr = "g" + beta; alpha = t.substr(1, 2); alpha = parseInt(alpha) + 1; t = "t" + alpha; t1 = t.substr(1, 2); g1 = gr.substr(1, 2); pr1 = "pr"+p+""+t1+""+g1; document.getElementById(b).innerHTML="<br><select onchange="presse(value, name);" name=""+pr1+""><option value="0">Design auswählen</option><option value="1">Text, Bild</option><option value="2">Bild, Text</option><option value="3">Text</option><option value="4">Bild</option><option value="5">Bild, Bild</option><option value="6">Bild, Bild, Bild</option></select><input type="hidden" name=""+design+"" value="2">"; }
if(va == 3){ document.getElementById(a).innerHTML="<br><textarea name=""+t+"" id=""+t+"" rows="4" cols="28">"+tex+"</textarea>"; alpha = t.substr(1, 2); alpha = parseInt(alpha) + 1; t = "t" + alpha; t1 = t.substr(1, 2); g1 = gr.substr(1, 2); pr1 = "pr"+p+""+t1+""+g1; document.getElementById(b).innerHTML="<br><select onchange="presse(value, name);" name=""+pr1+""><option value="0">Design auswählen</option><option value="1">Text, Bild</option><option value="2">Bild, Text</option><option value="3">Text</option><option value="4">Bild</option><option value="5">Bild, Bild</option><option value="6">Bild, Bild, Bild</option></select><input type="hidden" name=""+design+"" value="3">"; }
if(va == 4){ document.getElementById(a).innerHTML="<br><input name=""+gr+"" type="file" size="20">"; beta = gr.substr(1, 2); beta = parseInt(beta) +1; gr = "g" + beta; t1 = t.substr(1, 2); g1 = gr.substr(1, 2); pr1 = "pr"+p+""+t1+""+g1; document.getElementById(b).innerHTML="<br><select onchange="presse(value, name);" name=""+pr1+""><option value="0">Design auswählen</option><option value="1">Text, Bild</option><option value="2">Bild, Text</option><option value="3">Text</option><option value="4">Bild</option><option value="5">Bild, Bild</option><option value="6">Bild, Bild, Bild</option></select><input type="hidden" name=""+design+"" value="4">"; }
if(va == 5){ beta = gr.substr(1, 2); beta = parseInt(beta); document.getElementById(a).innerHTML="<br><input name=""+"g"+beta+"" type="file" size="20"><input name=""+"g"+(beta+1)+"" type="file" size="20">"; beta + 2; gr = "g" + beta; t1 = t.substr(1, 2); g1 = gr.substr(1, 2); pr1 = "pr"+p+""+t1+""+g1; document.getElementById(b).innerHTML="<br><select onchange="presse(value, name);" name=""+pr1+""><option value="0">Design auswählen</option><option value="1">Text, Bild</option><option value="2">Bild, Text</option><option value="3">Text</option><option value="4">Bild</option><option value="5">Bild, Bild</option><option value="6">Bild, Bild, Bild</option></select><input type="hidden" name=""+design+"" value="5">"; }
if(va == 6){ beta = gr.substr(1, 2); parseInt(beta); document.getElementById(a).innerHTML="<br><input name=""+"g"+beta+"" type="file" size="20"><input name=""+"g"+(beta+1)+"" type="file" size="20"><input name=""+"g"+(beta+2)+"" type="file" size="20">"; beta = gr.substr(1, 2); parseInt(beta); beta = beta + 3; gr = "g" + beta; t1 = t.substr(1, 2); g1 = gr.substr(1, 2); pr1 = "pr"+p+""+t1+""+g1; document.getElementById(b).innerHTML="<br><select onchange="presse(value, name);" name=""+pr1+""><option value="0">Design auswählen</option><option value="1">Text, Bild</option><option value="2">Bild, Text</option><option value="3">Text</option><option value="4">Bild</option><option value="5">Bild, Bild</option><option value="6">Bild, Bild, Bild</option></select><input type="hidden" name=""+design+"" value="6">"; } }else{ document.getElementById(a).innerHTML=""; if(p == 10){ document.getElementById("p90").innerHTML=""; }else{ var zeta = "p"+(10 * (p - 1) + 1); document.getElementById(zeta).innerHTML=""; } } }
presse('2', 'pr10_10_10');
</script> <table> <tr> <td width="776" bgcolor="#A29EBC" colspan="3"> <span id="p100"></span> <span id="p101"></span> <span id="p102"></span> <span id="p103"></span> <span id="p104"></span> <span id="p105"></span> <span id="p106"></span> <span id="p107"></span> <span id="p108"></span> <span id="p109"></span> </td> </tr> <tr> <td width="776" bgcolor="#A29EBC" colspan="3"> <span id="p110"></span> <span id="p111"></span> <span id="p112"></span> <span id="p113"></span> <span id="p114"></span> <span id="p115"></span> <span id="p116"></span> <span id="p117"></span> <span id="p118"></span> <span id="p119"></span> </td> </tr> <tr> <td width="776" bgcolor="#A29EBC" colspan="3"> <span id="p120"></span> <span id="p121"></span> <span id="p122"></span> <span id="p123"></span> <span id="p124"></span> <span id="p125"></span> <span id="p126"></span> <span id="p127"></span> <span id="p128"></span> <span id="p129"></span> </td> </tr> <tr> <td width="776" bgcolor="#A29EBC" colspan="3"> <span id="p130"></span> <span id="p131"></span> <span id="p132"></span> <span id="p133"></span> <span id="p134"></span> <span id="p135"></span> <span id="p136"></span> <span id="p137"></span> <span id="p138"></span> <span id="p139"></span> </td> </tr> <tr> <td width="776" bgcolor="#A29EBC" colspan="3"> <span id="p140"></span> <span id="p141"></span> <span id="p142"></span> <span id="p143"></span> <span id="p144"></span> <span id="p145"></span> <span id="p146"></span> <span id="p147"></span> <span id="p148"></span> <span id="p149"></span> </td> </tr> <tr> <td width="776" bgcolor="#A29EBC" colspan="3"> <span id="p150"></span> <span id="p151"></span> <span id="p152"></span> <span id="p153"></span> <span id="p154"></span> <span id="p155"></span> <span id="p156"></span> <span id="p157"></span> <span id="p158"></span> <span id="p159"></span> </td> </tr> <tr> <td width="776" bgcolor="#A29EBC" colspan="3"> <span id="p160"></span> <span id="p161"></span> <span id="p162"></span> <span id="p163"></span> <span id="p164"></span> <span id="p165"></span> <span id="p166"></span> <span id="p167"></span> <span id="p168"></span> <span id="p169"></span> </td> </tr> <tr> <td width="776" bgcolor="#A29EBC" colspan="3"> <span id="p170"></span> <span id="p171"></span> <span id="p172"></span> <span id="p173"></span> <span id="p174"></span> <span id="p175"></span> <span id="p176"></span> <span id="p177"></span> <span id="p178"></span> <span id="p179"></span> </td> </table>
Hallo Basic87
der nachfolgende text ist ein auszug aus meinem Programmtext,
bei öffnen kommt immer der fehler document.getelementbyid(...) ist Null oder kein Object.
kann mir mal jemand sagen woran das liegt bin schon total am verzweifeln.
Ich habe mir jetzt nicht die Mühe gemacht, komplett nachzuvollziehen, was dein Script genau macht, was mir aber beim groben überfliegen auffällt:
<script type="text/javascript">
function presse(va, pr, tex){
Wann, wodurch und mit welchen Parametern wird diese Funktion aufgerufen?
if(va != "0"){
document.write(a);
Wie sieht hier der Inhalt von a aus?
Bedenke, wenn das Script nicht während des Ladens sondern erst danach aufgerufen wird, besteht das gesamte Dokument nur noch aus dem Inhalt von a!
document.getElementById(b).innerHTML=...
Was genau enthält b? Enthält b das, was du erwartest?
Anzeigen lassen (eventuell mit alert), gibt es zu diesem Zeitpunkt ein Element mit dieser Id?
document.write(a);
Und wieder besteht das Dokument nur noch aus dem Inhalt von a.
document.getElementById(a).innerHTML=...
Was ist a nun eigentlich, der Dokumentinhalt, also HTML oder die Id eines Elements?
document.getElementById(b).innerHTML=...
Und wieder: Was genau enthält b? ...
Vergleiche jeweils, was die entsprechende Variable enthält z.B. mit einem davor notierten alert und ob es das ist, was du erwartest. Dann prüfe, ob das Dokument zu diesem Zeitpunkt ein Element mit der entsprechenden Id enthält (z.B. Dominspektor).
Auf Wiederlesen
Detlef
Hallo,
Ich hab gerade nichts zu tun, also hab ich deinen Quelltext schön formatiert. Zum Inhalt will ich jetzt erstmal nichts sagen, Ich würde das ganz anders schreiben... Sag doch erstmal, was ist es, was macht es, woher hast Du es, wie alt ist es? Poste die ganze Html-Seite bitte.
<script type="text/javascript">
function presse(va, pr, tex){
var p = pr.substr(2, 2);
parseInt(p);
var a = "p"+(10 * p);
var b = "p"+(10 * p + 1);
var c = "p"+(10 * p + 2);
var d = "p"+(10 * p + 3);
var e = "p"+(10 * p + 4);
var f = "p"+(10 * p + 5);
var g = "p"+(10 * p + 6);
var h = "p"+(10 * p + 7);
var i = "p"+(10 * p + 8);
if(va != "0"){
document.write(a);
var t = "t" + pr.substr(5, 2);
var gr = "g" + pr.substr(8, 5);
var p = parseInt(p);
p = p + 1;
var pr1;
var alpha;
var beta;
var design = "d" + p;
if(va == 1){
document.getElementById(a).innerHTML=
"<br><textarea name=\""+
t+
"\" id=\""+
t+
"\" rows=\"20\" cols=\"55\">"+
tex+
"</textarea><span style=\"vertical-align:1500%\"> <input name=\""+
gr+
"\" type=\"file\" size=\"20\"></span>";
alpha = t.substr(1, 2);
alpha = parseInt(alpha) + 1;
t = "t" + alpha;
beta = gr.substr(1, 2);
beta = parseInt(beta) +1;
gr = "g" + beta;
t1 = t.substr(1, 2);
g1 = gr.substr(1, 2);
pr1 = "pr"+p+"_"+t1+"_"+g1;
document.getElementById(b).innerHTML=
"<br><select onchange=\"presse(value, name);\" name=\""+
pr1+
"\"><option value=\"0\">Design auswählen</option><option value=\"1\">Text, Bild</option><option value=\"2\">Bild, Text</option><option value=\"3\">Text</option><option value=\"4\">Bild</option><option value=\"5\">Bild, Bild</option><option value=\"6\">Bild, Bild, Bild</option></select><input type=\"hidden\" name=\""+
design+
"\" value=\"1\">";
}
if(va == 2){
document.write(a);
document.getElementById(a).innerHTML=
"<br><span style=\"vertical-align: 1500%\"><input name=\""+
gr+
"\" type=\"file\" size=\"20\"> </span><textarea name=\""+
t+
"\" id=\""+
t+
"\" rows=\"20\" cols=\"55\">"+
tex+
"</textarea>";
beta = gr.substr(1, 2);
beta = parseInt(beta) +1;
gr = "g" + beta;
alpha = t.substr(1, 2);
alpha = parseInt(alpha) + 1;
t = "t" + alpha;
t1 = t.substr(1, 2);
g1 = gr.substr(1, 2);
pr1 = "pr"+p+"_"+t1+"_"+g1;
document.getElementById(b).innerHTML=
"<br><select onchange=\"presse(value, name);\" name=\""+
pr1+
"\"><option value=\"0\">Design auswählen</option><option value=\"1\">Text, Bild</option><option value=\"2\">Bild, Text</option><option value=\"3\">Text</option><option value=\"4\">Bild</option><option value=\"5\">Bild, Bild</option><option value=\"6\">Bild, Bild, Bild</option></select><input type=\"hidden\" name=\""+
design+
"\" value=\"2\">";
}
if(va == 3){
document.getElementById(a).innerHTML=
"<br><textarea name=\""+
t+
"\" id=\""+t+"\" rows=\"4\" cols=\"28\">"+
tex+
"</textarea>";
alpha = t.substr(1, 2);
alpha = parseInt(alpha) + 1;
t = "t" + alpha;
t1 = t.substr(1, 2);
g1 = gr.substr(1, 2);
pr1 = "pr"+p+"_"+t1+"_"+g1;
document.getElementById(b).innerHTML="<br><select onchange=\"presse(value, name);\" name=\""+
pr1+
"\"><option value=\"0\">Design auswählen</option><option value=\"1\">Text, Bild</option><option value=\"2\">Bild, Text</option><option value=\"3\">Text</option><option value=\"4\">Bild</option><option value=\"5\">Bild, Bild</option><option value=\"6\">Bild, Bild, Bild</option></select><input type=\"hidden\" name=\""+
design+
"\" value=\"3\">";
}
if(va == 4){
document.getElementById(a).innerHTML=
"<br><input name=\""+
gr+
"\" type=\"file\" size=\"20\">";
beta = gr.substr(1, 2);
beta = parseInt(beta) +1;
gr = "g" + beta;
t1 = t.substr(1, 2);
g1 = gr.substr(1, 2);
pr1 = "pr"+p+"_"+t1+"_"+g1;
document.getElementById(b).innerHTML=
"<br><select onchange=\"presse(value, name);\" name=\""+
pr1+
"\"><option value=\"0\">Design auswählen</option><option value=\"1\">Text, Bild</option><option value=\"2\">Bild, Text</option><option value=\"3\">Text</option><option value=\"4\">Bild</option><option value=\"5\">Bild, Bild</option><option value=\"6\">Bild, Bild, Bild</option></select><input type=\"hidden\" name=\""+
design+
"\" value=\"4\">";
}
if(va == 5){
beta = gr.substr(1, 2);
beta = parseInt(beta);
document.getElementById(a).innerHTML=
"<br><input name=\""+
"g"+
beta+
"\" type=\"file\" size=\"20\"><input name=\""+
"g"+
(beta+1)+
"\" type=\"file\" size=\"20\">";
beta + 2;
gr = "g" + beta;
t1 = t.substr(1, 2);
g1 = gr.substr(1, 2);
pr1 = "pr"+p+"_"+t1+"_"+g1;
document.getElementById(b).innerHTML=
"<br><select onchange=\"presse(value, name);\" name=\""+
pr1+
"\"><option value=\"0\">Design auswählen</option><option value=\"1\">Text, Bild</option><option value=\"2\">Bild, Text</option><option value=\"3\">Text</option><option value=\"4\">Bild</option><option value=\"5\">Bild, Bild</option><option value=\"6\">Bild, Bild, Bild</option></select><input type=\"hidden\" name=\""+
design+
"\" value=\"5\">";
}
if(va == 6){
beta = gr.substr(1, 2);
parseInt(beta);
document.getElementById(a).innerHTML=
"<br><input name=\""+
"g"+
beta+
"\" type=\"file\" size=\"20\"><input name=\""+
"g"+
(beta+1)+
"\" type=\"file\" size=\"20\"><input name=\""+
"g"+
(beta+2)+
"\" type=\"file\" size=\"20\">";
beta = gr.substr(1, 2);
parseInt(beta);
beta = beta + 3;
gr = "g" + beta;
t1 = t.substr(1, 2);
g1 = gr.substr(1, 2);
pr1 = "pr"+p+"_"+t1+"_"+g1;
document.getElementById(b).innerHTML=
"<br><select onchange=\"presse(value, name);\" name=\""+
pr1+
"\"><option value=\"0\">Design auswählen</option><option value=\"1\">Text, Bild</option><option value=\"2\">Bild, Text</option><option value=\"3\">Text</option><option value=\"4\">Bild</option><option value=\"5\">Bild, Bild</option><option value=\"6\">Bild, Bild, Bild</option></select><input type=\"hidden\" name=\""+
design+
"\" value=\"6\">";
}
}else{
document.getElementById(a).innerHTML="";
if(p == 10){
document.getElementById("p90").innerHTML="";
}else{
var zeta = "p"+(10 * (p - 1) + 1);
document.getElementById(zeta).innerHTML="";
}
}
}
presse('2', 'pr10_10_10');
</script>
<table>
<tr>
<td width="776" bgcolor="#A29EBC" colspan="3">
<span id="p100"></span>
<span id="p101"></span>
<span id="p102"></span>
<span id="p103"></span>
<span id="p104"></span>
<span id="p105"></span>
<span id="p106"></span>
<span id="p107"></span>
<span id="p108"></span>
<span id="p109"></span>
</td>
</tr>
<tr>
<td width="776" bgcolor="#A29EBC" colspan="3">
<span id="p110"></span>
<span id="p111"></span>
<span id="p112"></span>
<span id="p113"></span>
<span id="p114"></span>
<span id="p115"></span>
<span id="p116"></span>
<span id="p117"></span>
<span id="p118"></span>
<span id="p119"></span>
</td>
</tr>
<tr>
<td width="776" bgcolor="#A29EBC" colspan="3">
<span id="p120"></span>
<span id="p121"></span>
<span id="p122"></span>
<span id="p123"></span>
<span id="p124"></span>
<span id="p125"></span>
<span id="p126"></span>
<span id="p127"></span>
<span id="p128"></span>
<span id="p129"></span>
</td>
</tr>
<tr>
<td width="776" bgcolor="#A29EBC" colspan="3">
<span id="p130"></span>
<span id="p131"></span>
<span id="p132"></span>
<span id="p133"></span>
<span id="p134"></span>
<span id="p135"></span>
<span id="p136"></span>
<span id="p137"></span>
<span id="p138"></span>
<span id="p139"></span>
</td>
</tr>
<tr>
<td width="776" bgcolor="#A29EBC" colspan="3">
<span id="p140"></span>
<span id="p141"></span>
<span id="p142"></span>
<span id="p143"></span>
<span id="p144"></span>
<span id="p145"></span>
<span id="p146"></span>
<span id="p147"></span>
<span id="p148"></span>
<span id="p149"></span>
</td>
</tr>
<tr>
<td width="776" bgcolor="#A29EBC" colspan="3">
<span id="p150"></span>
<span id="p151"></span>
<span id="p152"></span>
<span id="p153"></span>
<span id="p154"></span>
<span id="p155"></span>
<span id="p156"></span>
<span id="p157"></span>
<span id="p158"></span>
<span id="p159"></span>
</td>
</tr>
<tr>
<td width="776" bgcolor="#A29EBC" colspan="3">
<span id="p160"></span>
<span id="p161"></span>
<span id="p162"></span>
<span id="p163"></span>
<span id="p164"></span>
<span id="p165"></span>
<span id="p166"></span>
<span id="p167"></span>
<span id="p168"></span>
<span id="p169"></span>
</td>
</tr>
<tr>
<td width="776" bgcolor="#A29EBC" colspan="3">
<span id="p170"></span>
<span id="p171"></span>
<span id="p172"></span>
<span id="p173"></span>
<span id="p174"></span>
<span id="p175"></span>
<span id="p176"></span>
<span id="p177"></span>
<span id="p178"></span>
<span id="p179"></span>
</td>
</table>
Gruß, Nils
n'abend,
kann mir mal jemand sagen woran das liegt bin schon total am verzweifeln.
(a) parseInt(p);
hat keinen Effekt auf p, folgendes hingegen schon: p = parseInt(p);
(b) benutzt document.write()
- dir ist bewusst, dass diese Funktion nur bei einem aktuell ladenden Dokument von Nutzen ist (und wie gewünscht etwas _in_ das Dokument schreibt)? In allen anderen Fällen überschreibt document.write() das aktuelle Dokument mit seinem Inhalt.
(c) sieht das so aus, als würdest du deine Funktion aufrufen, wenn dein Dokuemtn noch gar nicht geladen ist. Woher willst du dann wissen, dass das Objekt mit der ID "p100" existiert? kannst du gar nicht? richtig.
(d) solltest du wie in [c] beschrieben nicht darauf warten, dass dein Dokument mit all seinen Elementen geladen ist, ist auch nicht sichergestellt, dass deine Elemente beim Ausführen deines Scripts auch tatsächlich vorhanden sind. Abhilfe schafft hier der onload-handler, z.B. so:
window.onload = function()
{
deineFunktion('auch','mit','paranetern');
};
(e) warzn übergibst du va als String, wenn du doch eigentlich in den meisten Fällen eine Zahl erwartest? Und wieso mixt du das so (ohne erkennbaren Grund) durcheinander?
(f) prüfe grundsätzlich jedes Objekt, bevor du es benutzt. Z.B. so:
var xyz = document.getElementById('EinElement');
if( !xzy )
alert( 'Objekt "EinElement" konnte nicht gefunden werden' );
else
xyz.focus();
(g) arbeitest du da mit sehr viel redundatem Gedöns. Überlege, wie du dir das Kapseln mancher Funktionalität in Funktionen zu Nütze machen kannst. Z.B. so:
// statt dem folgenden kram:
document.getElementById('foo').innerHTML = '<strong>1</strong>';
document.getElementById('bar').innerHTML = '<strong>2</strong>';
document.getElementById('baz').innerHTML = '<strong>3</strong>';
document.getElementById('blubb').innerHTML = '<strong>4</strong>';
// würde man intelenterweise etwas ähnlich dem folgenden basteln:
function setInnerHTML( elementID, number )
{
var obj = document.getElementById( elementID );
if( !obj )
return false;
obj.innerHTML = '<strong>' + number + '</strong>';
return true;
}
setInnerHTML( 'foo', 1 );
setInnerHTML( 'bar', 2 );
setInnerHTML( 'baz', 3 );
setInnerHTML( 'blubb', 4 );
weiterhin schönen abend...