Javascript werkt wel in Firefox maar niet in Internet Explorer

Status
Niet open voor verdere reacties.

xeross

Gebruiker
Lid geworden
13 apr 2007
Berichten
91
Hey,

Ik ben bezig met een zeer uitgebreid javascript voor mijn school dat word gebruikt voor een rapportsysteem.
Maar het werkt alleen in firefox.
In internet explorer zie je alleen de headers per vak.
Kan iemand naar de bron kijken waarom hij in IE niet werkt,
als je in ie de html bekijkt nadat de javascript is uitgevoerd dan staat alles er wel maar om een of andere reden word hij niet weergegeven.
Link: http://xeross.mine.nu/rapport/rapport.php
daarna klik op de Helpmij.nl klik hier link
Mischien ook ideeën om deze gemmakelijker neer te zetten met minder JS.

Het script:
Code:
<script type="text/javascript">
var subjects = eval({"1":["Nederlands","Blok",5,11,[12,15],[3,3,3,3,3,3,3,3,3,3],{"Overige":[3,3,3,3],"Something":[3,3,3,3]}],"2":["Engels","Chapter",7,3,[8],[1,6.8,7],{"SO":[5,4,1],"Something":[5,3]}]});
function setGrade(subject, id, grade, misc)
{
	if(!misc)
	{
		subjects[subject][5][id] = grade;
	}
	else
	{
		subjects[subject][6][misc] = grade.split(", ");
	}
}

function changeChapters(id, value)
{
	subjects[id][3] = parseInt(value);
}

function changeType(id)
{

}

function genTables()
{
	document.getElementById("subjects").innerHTML = "";
	for (var i in subjects){
		genTable(i);
	}
}

function genTable(id)
{
	// Create the title
	obj = document.getElementById("subjects");
	var title = document.createElement("div");
	var titleText = document.createTextNode(subjects[id][0]);
	title.className = "title";
	title.appendChild(titleText);
	obj.appendChild(title);
	
	// Create the table
	var chapPerColumn = Math.ceil((subjects[id][3] - (subjects[id][4].length - 1)) / 3);
	var table = document.createElement("table");
	table.width = "600";
	var tr = Array();
	for(i=0;i<=chapPerColumn-1;i++)
	{
		tr[i] = document.createElement("tr");
	}
	
	// Generate the string with excluded chapters
	var exclude = "|" + subjects[id][4].join("|") + "|";
	
	// Initialize some variables
	var j = 0;
	var r = 0;
	var avg = 0;
	var avgDiv = 0;
	
	// Check if there are any chapters at all, if not don't generate(For example drawing only has 1 grade).
	if(subjects[id][3] > 0)
	{
		for(i=subjects[id][2];i<=subjects[id][2]+subjects[id][3];i++)
		{
			// Check if a chapter should be excluded, if not generate the cell
			if(exclude.indexOf("|" + i + "|") == -1)
			{
				var nameCell = document.createElement("td");
				nameCell.width = "130";
				var nameCellText = document.createTextNode(subjects[id][1] + " " + i);
				nameCell.appendChild(nameCellText);
				var varCell = document.createElement("td");
				varCell.width = "70";
				varCell.innerHTML = "<input name=\"grade_" + id + "_" + j + "\" onKeyUp=\"setGrade(" + id + ", " + j + ", this.value);\" value=\"" + subjects[id][5][j] + "\" type=\"text\" size=\"3\" maxlength=\"3\" />";
				tr[r].appendChild(nameCell);
				tr[r].appendChild(varCell);
				
				// Add data for the average
				avg += (parseFloat(subjects[id][5][j]) * 2);
				avgDiv += 2;
				
				j++;
				r++;
				
				// Used for creating 3 columns
				if(chapPerColumn == r)
				{
					r = 0;
				}
			}	
		}
	}
	
	// Append table rows to table
	for(i=0;i<=chapPerColumn-1;i++)
	{
		table.appendChild(tr[i]);
	}
	
	
	// Add the other grades
	for(var i in subjects[id][6])
	{
		var row = document.createElement("tr");
		var nameCell = document.createElement("td");
		var varCell = document.createElement("td");
		var nameCellText = document.createTextNode(i);
		nameCell.appendChild(nameCellText);
		varCell.colSpan = "5";
		varCell.innerHTML = "<input style=\"width:470px;\" onkeyup=\"setGrade(" + id + ", null, this.value, '" + i + "');\"  name=\"misc_" + id + "_" + i + "\" value=\"" + subjects[id][6][i].join(", ") + "\" type=\"text\" />"
		row.appendChild(nameCell);
		row.appendChild(varCell);
		table.appendChild(row);
		for (var j in subjects[id][6][i])
		{	
			avg += parseFloat(subjects[id][6][i][j]);
			avgDiv++;
		}
	}
	// Make the cell for the avarage
	var row = document.createElement("tr");
	var nameCell = document.createElement("td");
	var varCell = document.createElement("td");
	var nameCellText = document.createTextNode("Gemiddelde: ");
	var avg = (avg / avgDiv);
	var varCellText =  document.createTextNode(Math.round(avg*100)/100);
	nameCell.appendChild(nameCellText);
	varCell.appendChild(varCellText);
	row.appendChild(nameCell);
	row.appendChild(varCell);
	table.appendChild(row);
	
	obj.appendChild(table);
	// Add a break to space things
	var br = document.createElement("br");
	obj.appendChild(br);
}
</script>

MVG
 
Laatst bewerkt door een moderator:
Bij mij werkt het. Internet Explorer 8 Beta.

Ik weet wel dat IE7 en lager een andere manier hebben van nieuwe rijen invoegen in een tabel. Normaal gaat het zo:

Code:
var row = table.insertRowl(-1);

In IE7 en lager geeft dat een foutmelding. Daar moet het zo:
Code:
var row = table.insertCell(null);

Om er zeker van te zijn dat het werk zal het zo moeten:
Code:
var row = false;
try
{
  row = table.insertRow(-1);
}
catch
{
  row = table.insertRow(null);
}
 
ik doe altijd createElement("tr") enz.
is dat de verkeerde methode dus ?
 
Hmm dat heb ik nooit geprobeerd. Misschien dat het niet werkt in IE7 en lager. Maar je kunt het proberen.
 
Nu wel :P Maarja, bij mij werkt het in IE 8. IE 7 heb ik niet meer :(
 
Als je script alleen niet meer in IE6 werkt zou ik het laten zitten. IE6 ondersteunen is het niet meer waard behalve als je doelgroep ongebruikelijk veel IE6 gebruikt. Of werkt het ook niet in IE7 maar geeft het ook geen foutmelding?

Ik zou in iedergeval proberen of het gebruik van insertRow en insertCell het probleem verhelpt. Ze zitten in de w3c specificaties en het bouwen van tabellen is precies waar ze voor gemaakt zijn. En Microsoft doet vaak de raarste dingen, dus wie weet.
 
hmm probleem is dat alle leraren IE7 gebruiken ik kan ze de website wel als een portable Firefox aanbieden maar vind het beter om het gewoon in ie werkend te krijgen zal ns naar de officiele manier kijken
 
Ik heb inderdaad ook problemen ondervonden in MSIE wanneer je probeert elementen als TD en TR toe te voegen. De manier die Glest in zijn eerste post beschrijft (met insertRow en insertCell functies) is de methode die door alle browsers ondersteund word.
Zie http://msdn.microsoft.com/en-us/library/ms532998.aspx voor meer informatie. Merk wel op dat MS zich niet helemaal (of, helemaal niet :P) aan de webstandaarden houd, dus je moet oppassen met wat je leest. Het deel over de insertRow/Cell functie klopt overigens wel.

EDIT: in een script van mij zie ik staan dat je wel een TD element kan maken met het DOM. De Row zul je echter wel met x.insertRow() moeten maken. Dit script werkte goed in FF2, FF3, Safari, MSIE 7. Voor de zekerheid zou ik wel even kijken naar de insertCell functie.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan