appendChild-Funktion in IE6 geht nicht
Sebastian Götz
- javascript
0 Struppi
Hallo Forum.
Kurz zur Erklärung was ich beabsichtige:
Ich habe eine Seite mit einem Formular und verschiedenen INPUT-Elementenm (Textfelder, Checkboxen, Selectboxen). In der Seite ist ein IFrame eingebettet, der die Aufgabe hat, die aktuelle Auswahl abzuspeichern. Dazu werden beim Submit des IFrames alle Elemente des Formulars kopiert und in das Formular des IFrames gehängt.
Das Problem ist nun, dass die ganze Geschichte wunderbar funktioniert, solange Firefox oder IE8 zum Einsatz kommen. IE7 habe ich nicht getestet, aber ich vermute, dass es mit diesem ebenfalls funktioniert.
Die Funktion saveData wird beim Submit aufgerufen, woraufhin die Parameter dynamisch in das Formular des IFrame kopiert werden.
function saveData()
{
SetChangedFlag(false);
appendDynamicParams();
if( document.getElementById("ID").value != "null" &&
document.getElementById("ID").value != "0" )
{
DoCommand("SAVE");
}
else
{
DoCommand("NEW");
}
}
function appendDynamicParams()
{
var elements = parent.document.forms['form1'].elements;
for( var i=0; i<elements.length; i++ )
{
if( elements[i].name != 'COMMAND' &&
elements[i].name != 'ID' &&
elements[i].name != 'LSTUSERS' &&
elements[i].name != 'CKALLPERSONS' &&
elements[i].name != 'VAPPLI' )
{
addInputElement(elements[i]);
}
}
}
function addInputElement(p_element)
{
var objInput = document.createElement(p_element.nodeName);
objInput.name = 'PARAM_' + p_element.name;
if( p_element.id )
{
objInput.id = 'PARAM_' + p_element.id;
}
objInput.disabled = false;
objInput.style.visibility = 'hidden';
objInput.style.display = 'none';
if( p_element.nodeName.toLowerCase() == 'select' )
{
objInput.multiple = p_element.multiple;
if( p_element.options )
{
for( var i=0; i<p_element.options.length; i++ )
{
if( p_element.multiple || p_element.options[i].selected )
{
var strText = p_element.options[i].text;
var strValue = '(' + p_element.options[i].value + '):(' + strText + ')';
objInput.options[i] = new Option(strText, strValue, p_element.options[i].defaultSelected, true);
}
}
}
}
else if( p_element.nodeName.toLowerCase() == 'input' )
{
objInput.type = 'text'; // submit all input elements as plain text
if( p_element.type.toLowerCase() == 'checkbox' )
{
objInput.value = p_element.checked;
}
else
{
objInput.value = p_element.value;
}
}
if( p_element.type.toLowerCase() != 'radio' || p_element.checked )
{
// append input to form
document.form1.appendChild(objInput);
}
}
Das Seltsame an der Sache ist nun, dass ich keinen Script-Fehler bekomme. Der Code wird fehlerfrei ausgeführt, scheint aber keinen Einfluss zu haben. Ich habe auch bereits versucht, mit setTimeout zu arbeitet - ohne Erfolg. Hat jemand Erfahrungen mit ähnlichen Effekten gemacht oder sieht jemand einen groben Fehler in dem ganzen Code?
Danke schon mal,
Sebastian
Das Problem ist nun, dass die ganze Geschichte wunderbar funktioniert, solange Firefox oder IE8 zum Einsatz kommen. IE7 habe ich nicht getestet, aber ich vermute, dass es mit diesem ebenfalls funktioniert.
Was heißt denn hier "nicht funktioniert"?
Struppi.
Hallo Struppi.
Was heißt denn hier "nicht funktioniert"?
Nun nicht funktioniert heißt in diesem Falle, dass zwar kein Javascript-fehler auftritt, aber die Formularelemente nicht auf dem Server abkommen. Also beim Auswerten des Requests sind sie einfach nicht da.
Gruß
Sebastian
Was heißt denn hier "nicht funktioniert"?
Nun nicht funktioniert heißt in diesem Falle, dass zwar kein Javascript-fehler auftritt, aber die Formularelemente nicht auf dem Server abkommen. Also beim Auswerten des Requests sind sie einfach nicht da.
Wie hast du das überprüft?
Sind sie nicht da oder leer?
Hast du mal versucht die die Elemente nicht zu verstecken, sondern anzeigen zu lassen?
Sind sie dann sichtbar?
Werden sie dann übertragen?
Struppi.