Mal wieder eine IE inkompatibilität

Operator_Jon

Erfahrenes Mitglied
Hi!

Der Fehler ist bestimmt schnell gefunden, aber ich komme einfach nicht drauf, wieso das Script im FF super funktioniert, dafür aber im IE total versagt...
Im IE wird eine Reihe angezeigt, die inputs besitzen allerdings keine Attribute...
Bei jedem erneuten Aufruf wird die Variable weiter heraufgezählt, allerdings bleibt das Erstellen der Elemente aus :(
Javascript:
var cTable = window.document.getElementById('contactTable');
var cCount = 0;

var addRow = function() {
	cCount += 1;
	
	var tr;
	var td;
	var inp;
	
	tr = window.document.createElement('tr');
	tr.setAttribute('id','cRow_' + cCount);
	
	td = window.document.createElement('td');
	td.setAttribute('class','box');
	inp = window.document.createElement('input');
	inp.setAttribute('type','text');
	inp.setAttribute('name','firstname_' + cCount);
	inp.setAttribute('class','editmedium');
	td.appendChild(inp);
	tr.appendChild(td);
	
	td = window.document.createElement('td');
	td.setAttribute('class','box');
	inp = window.document.createElement('input');
	inp.setAttribute('type','text');
	inp.setAttribute('name','name_' + cCount);
	inp.setAttribute('class','editmedium');
	td.appendChild(inp);
	tr.appendChild(td);
	
	td = window.document.createElement('td');
	td.setAttribute('class','box');
	inp = window.document.createElement('input');
	inp.setAttribute('type','text');
	inp.setAttribute('name','email_' + cCount);
	inp.setAttribute('class','editmedium');
	td.appendChild(inp);
	tr.appendChild(td);
	
	cTable.appendChild(tr);
	
	//IE braucht natürlich mal wieder ne Extrawurst...
	if (window.document.all) {
		window.document.body.innerHTML = window.document.body.innerHTML;
	}
}

Vielen Dank schon einmal!
 
Füge das <tr>-Element mal so in die Tabelle ein:
Code:
cTable.getElementsByTagName('tbody')[0].appendChild(tr);
...Browser produzieren aus deinem HTML-Code intern ihr eigenes Knotengerüst, und dort haben Tabellen einen <tbody>...ob du ihn nun hingeschrieben hast, oder nicht.

Was die Attributzuweisung betrifft...soweit ich sehe, gibt es da nur bei der CSS-Klasse Probleme...nehme die Zuweisung mal per:

Code:
inp.className='editmedium';
....vor.
 
Nun, das Zuweisen der Attribute funktioniert schon, die einzelnen Elemente haben die gewünschten Klassen!

Im FF funktioniert es mit der Änderung weiterhin sehr gut, aber der IE sagt
Code:
'cTable.getElementsByTagName(...).0' ist Null oder kein Objekt

Wenn ich mir
Javascript:
alert(cTable.getElementsByTagName('tbody').length);
beim Funktionsaufruf ausgeben lasse, kommt beim ersten Aufruf eine 1, beim 2ten jedoch eine 0...
Ich verstehe ja eher Frauen als den IE :D
 
Zuletzt bearbeitet:
Hi,

das Problem ist nur dann vorhanden, weil der Inhalt des Bodies neu geschrieben wird.
Code:
if (window.document.all) {
  window.document.body.innerHTML = window.document.body.innerHTML;
}
Damit existiert für den IE das globale Objekt cTable nicht mehr. Testen kannst Du das, indem
Du am Anfang der Funktion die Objekte miteinander vergleichst.
Code:
if(cTable == document.getElementById("contactTable"))
  alert("Objekt existiert");
else
  alert("Objekt existiert nicht mehr");
Abhilfe erreichst Du, indem Du das Objekt cTable bei jedem Funktionsaufruf neu erstellst.
Code:
var addRow = function() {
  cTable = window.document.getElementById('contactTable');
  // bisheriger Quellcode
}
Ciao
Quaese
 

Neue Beiträge

Zurück