Mit DOM erstelltes Formular / onChange Problem

chris.woj

Mitglied
Hey leute,


also mein Problem. ich lasse ein Formualar bzw. Zeile in ner Tabelle mit DOM erstellen..

Code:
function newRow(){
		var TR = document.getElementById("articletbl").insertRow(Zeile);
		Zeile += 1;
		ZeileNr += 1;
		
		// Pos Spalte
		var TD1 = document.createElement("td");
		var TD1text = document.createTextNode(ZeileNr);
                                          .....

und so weiter.. jetzt lasse ich allerdings eine spalte mit einem Dropdown erstellen. Dieser Dropdown soll onChange eine Funktion ausführen.

Das Problem ist bekannt, ich finde aber keine andere lösung, da es auch im Mozilla funktioniert aber im Internet Explorer nicht !

Das ganze sieht so aus :

Code:
var TD5 = document.createElement("td");
		
		var sel = document.createElement("select");
		
		var name = document.createAttribute("name");
		name.nodeValue = "expire_" + ZeileNr;
		sel.setAttributeNode(name);
		
		var id = document.createAttribute("id");
		id.nodeValue = "expire_" + ZeileNr;
		sel.setAttributeNode(id);
		
		var klasse = document.createAttribute("class");
		klasse.nodeValue = "forminput";
		sel.setAttributeNode(klasse);
		
		var breite = document.createAttribute("width");
		breite.nodeValue = 73;
		TD5.setAttributeNode(breite);
		
		var align = document.createAttribute("align");
		align.nodeValue = "center";
		TD5.setAttributeNode(align);
		
// ----> PROBLEM 

		var onChange = document.createAttribute("onChange");
		
		if ((!document.all)&&(document.getElementById)){
       		sel.setAttribute("onChange","calc(ZeileNr)");
   		}    
   		//workaround for IE 5.x
   		if ((document.all)&&(document.getElementById)){
    	   sel["onChange"]=new Function("calc(ZeileNr)");
   		}

// ----> PROBLEM 
		



		var opt = new Array();
		var value = new Array();
		var text = new Array();

		    opt[1] = document.createElement("option");
			value[1] = document.createAttribute("value");
			value[1].nodeValue = "12";
			opt[1].setAttributeNode(value[1]);
			text[1] = document.createTextNode("12");
			opt[1].appendChild(text[1]);
			sel.appendChild(opt[1]);
			
			opt[2] = document.createElement("option");
			value[2] = document.createAttribute("value");
			value[2].nodeValue = "24";
			opt[2].setAttributeNode(value[2]);
			text[2] = document.createTextNode("24");
			opt[2].appendChild(text[2]);
			sel.appendChild(opt[2]);
			
			opt[3] = document.createElement("option");
			value[3] = document.createAttribute("value");
			value[3].nodeValue = "36";
			opt[3].setAttributeNode(value[3]);
			text[3] = document.createTextNode("36");
			opt[3].appendChild(text[3]);
			sel.appendChild(opt[3]);


		TD5.appendChild(sel);
		TR.appendChild(TD5);

*help* ich weiß nicht mehr weiter !


danke schonmal fürs lesen :) ist ja doch nen bissl länger geworden.

gruß chris
 
Probier mal:

Code:
sel.onchange=new Function("F","calc("+ZeileNr+")");

Ansonsten ....ist das mit dem DOM im IE so eine Sache....

ich glaube mich entsinnen zu können, dass zumindest IE5 keine <tr>/<td> nach DOM-Methode erzeugen kann....
es wäre daher empfehlenswerter, dies generell per insertRow(),insertCell() zu machen.

Auch setAttributeNode()/createAttribute() kann der IE5+ meines Erachtens nicht....
da wäre eine Vorgehensweise a'la
Code:
objekt.attribut='wert';
(wie beim onChange)...also angebrachter(und bequemer:-))
....das alles sollten auch andere Browser verstehen, du bräuchtest die Sache also nicht doppelt coden.

Im EndEffekt hängt es aber von deiner Aufgabenstellung ab.
 
Also erstmal danke für die schnelle Antwort. Es funktioniert soweit, außer das ich bei einem zweiten Aufruf in einer anderen funktion keinen zweiten Parameter angebene kann.

IE schrott... würde mal jeder Firefox benutzen :o)

Code:
sel.onchange=new Function("F","setRow("+ZeileNr+","+this.value+")");

die meisten sachen funktionieren sogar unter IE 5.x und DOM .. also nur so als feedback.

//edit:
ok also ich habs.. es funktioniert mit deinem Vorschlag. Super herzlichen Dank.

//edit2:
falls jemand das selbe Problem hat.. ganz wichtig ist, wie ich gemerkt habe die kleinschreibung .. also nix sauber und ordentlich coden :
Code:
sel.onchange=new Function("F","setRow("+ZeileNr+","+this.value+")");


danke für die hilfe..
 
Zuletzt bearbeitet:
Falls sich das "this.value" auf das die Funktion aufrufende Element bezieht, solltest du es lieber so schreiben:
Code:
sel.onchange=new Function("F","setRow("+ZeileNr+",this.value)");
....(wobei ein <select> jedoch gar kein "value" hat)
 

Neue Beiträge

Zurück