IE Name Problem
Andi
- javascript
Hallo,
ich erstelle mit DOM ein Inputfeld:
servcell = newrow.insertCell(servcellIndex++);
input = document.createElement('INPUT');
input.setAttribute('type','text');
input.setAttribute('name','PA03RID['+PA03RID+']['+i+'][SP]['+hDefine+']');
input.setAttribute('size','8');
input.setAttribute('maxlength','8');
servcell.appendChild(input);
Nun möchte ich zu einem späteren Zeitpunkt mit einer Methode alle Inputfelder auf 0 setzen. Dazu nehme ich alle Namen und gehe diese in einer Schleife durch:
for (i=0;i<Namearr.value;i++)
document.forms[0][Namearr.value[i]].value = 0;
Das funktioniert aber im IE nicht. Es funktioniert aber wenn ich das Element schon vorher angelegt habe. Wenn ich mir alle Elemente der Form anzeige sind die Elemente nicht vorhanden. Beim Abschicken der Daten werden die Daten aber richtig gesendet.
Hat jemand einen Tipp für mich?
Danke für eure Hilfe und Gruß
Andi
ich erstelle mit DOM ein Inputfeld:
servcell = newrow.insertCell(servcellIndex++);
input = document.createElement('INPUT');
input.setAttribute('type','text');
input.setAttribute('name','PA03RID['+PA03RID+']['+i+'][SP]['+hDefine+']');
input.setAttribute('size','8');
input.setAttribute('maxlength','8');
die setAttribute Funktion ist hier nicht nötig, es reicht:
input.type = 'text';
input.name = 'PA03RID['+PA03RID+']['+i+'][SP]['+hDefine+']';
....
Nun möchte ich zu einem späteren Zeitpunkt mit einer Methode alle Inputfelder auf 0 setzen. Dazu nehme ich alle Namen und gehe diese in einer Schleife durch:
for (i=0;i<Namearr.value;i++)
document.forms[0][Namearr.value[i]].value = 0;
Was steht Namearr?
Das funktioniert aber im IE nicht. Es funktioniert aber wenn ich das Element schon vorher angelegt habe. Wenn ich mir alle Elemente der Form anzeige sind die Elemente nicht vorhanden. Beim Abschicken der Daten werden die Daten aber richtig gesendet.
Wenn das stimmt, dann kann dein Browser wahrscheinlich Vodoo.
Struppi.
Hallo,
Nun möchte ich zu einem späteren Zeitpunkt mit einer Methode alle Inputfelder auf 0 setzen. Dazu nehme ich alle Namen und gehe diese in einer Schleife durch:
for (i=0;i<Namearr.value;i++)
document.forms[0][Namearr.value[i]].value = 0;Was steht Namearr?
In Namearr stehen alle Namen der Inputfelder
Wenn das stimmt, dann kann dein Browser wahrscheinlich Vodoo.
Wohl oder übel.
Gruß
Andi
for (i=0;i<Namearr.value;i++)
document.forms[0][Namearr.value[i]].value = 0;Was steht Namearr?
In Namearr stehen alle Namen der Inputfelder
sicher?
Wenn das stimmt, dann kann dein Browser wahrscheinlich Vodoo.
Wohl oder übel.
100% nicht, aber ohne konkretere Informationen, sieht es so aus.
Struppi.
for (i=0;i<Namearr.value;i++)
document.forms[0][Namearr.value[i]].value = 0;Was steht Namearr?
In Namearr stehen alle Namen der Inputfelder
sicher?
100% sicher, es funktioniert im Firefox und Opera etc.
Gruß
Andi
In Namearr stehen alle Namen der Inputfelder
sicher?
100% sicher, es funktioniert im Firefox und Opera etc.
Na, dann ist ja alles in Ordnung.
Struppi.
In Namearr stehen alle Namen der Inputfelder
sicher?
100% sicher, es funktioniert im Firefox und Opera etc.
Na, dann ist ja alles in Ordnung.
Sag das mal meinem Chef ;)
Gruß
Andi
Hallo,
for (i=0;i<Namearr.value;i++)
document.forms[0][Namearr.value[i]].value = 0;Was steht Namearr?
In Namearr stehen alle Namen der Inputfelder
sicher?
100% sicher, es funktioniert im Firefox und Opera etc.
Das komische ist, wenn ich eine Id mit dem gleichen Namen angebe funktioniert es auch im IE.
Gruß
Andi
Das komische ist, wenn ich eine Id mit dem gleichen Namen angebe funktioniert es auch im IE.
Hast du mal versucht nicht die Funktion setAttribute zu verwenden?
Deine Angaben und deine Mitarbeit um dein Problem zu lösen ist extrem gering.
Wie soll man dir helfen, wenn du einfach immer irgendwelche Sachen behauptest, aber weder mit Code belegst noch sonst irgendwie nachvollziehbar machst?
Struppi.
Das komische ist, wenn ich eine Id mit dem gleichen Namen angebe funktioniert es auch im IE.
Hast du mal versucht nicht die Funktion setAttribute zu verwenden?
Ja habe ich probiert
Deine Angaben und deine Mitarbeit um dein Problem zu lösen ist extrem gering.
Wie soll man dir helfen, wenn du einfach immer irgendwelche Sachen behauptest, aber weder mit Code belegst noch sonst irgendwie nachvollziehbar machst?
Code habe ich schon den ganzen der relevant ist eingefügt.
Nachvollziehbar ist das Ganze schon. Ich erstelle ein Inputfeld in einer Zelle. Es wird dort angelegt mit diesem Namen. Wenn ich das Formular abschicke habe ich den Inhalt des Feldes in diesem Namen.
Nun möchte ich aber alle auf 0 setzen. Dazu habe ich einen alle Namen in einem Array und gehe diese dann durch. Leider sind diese Elemente in der form aber nicht vorhanden und es kommt zum Fehler.
Gruß
Andi
Code habe ich schon den ganzen der relevant ist eingefügt.
Nachvollziehbar ist das Ganze schon. Ich erstelle ein Inputfeld in einer Zelle. Es wird dort angelegt mit diesem Namen. Wenn ich das Formular abschicke habe ich den Inhalt des Feldes in diesem Namen.
Nun möchte ich aber alle auf 0 setzen. Dazu habe ich einen alle Namen in einem Array und gehe diese dann durch. Leider sind diese Elemente in der form aber nicht vorhanden und es kommt zum Fehler.
Ein nachvollziehbares Skript wäre gut gewesen, so musste ich es mir selber bauen:
function addField(f)
{
var el = document.createElement('input');
el.name = el.id = 'test';
el.type = 'text';
f.appendChild(el);
}
function clearField(f)
{
var el = f.test;
if(!el) return;
if(el.length) for(var i = 0; i < el.length; i++) el[i].value = 0;
else el.value = 0;
}
und minimaler HTML Code:
<form action="#" method="get">
<input type="button" value="add" onclick="addField(this.form)">
<input type="button" value="auf Null" onclick="clearField(this.form)">
<input type="submit" value="submit">
</form>
Es ist wohl so wie dedlfix sagt. Du musst dem Element eine ID geben.
Struppi.
Hallo,
Das komische ist, wenn ich eine Id mit dem gleichen Namen angebe funktioniert es auch im IE.
Ja, dann mach das so. Das stört die anderen Browser nämlich nicht.
Das Problem habe ich hier mal in einem aufs Wesentliche verkürzten Beispiel zusammengestellt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Titel</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript">
<!--
function init() {
input = document.createElement('INPUT');
input.type = "text";
input.name = "test";
//input.id = "test";
document.forms[0].getElementsByTagName("P")[0].appendChild(input);
}
//-->
</script>
</head>
<body onload="init();">
<form action="#" method="get">
<p>
<input type="button" name="set1" value="set1" onclick="document.forms[0].elements['test'].value='0';">
<input type="button" name="set2" value="set2" onclick="this.form.elements['test'].value='1';">
<input type="submit" name="ok" value="ok">
</p>
</form>
</body>
</html>
Ohne ID kennt der IE document.forms[0].elements['test'] nicht, mit ID schon. Er kennt aber document.forms[0].elements[3]. Das deutet darauf hin, dass das beim Setzen des name-Attributes via JavaScript vom IE das namedItem in der elements-Collection nicht ergänzt wird, sondern nur das Item.
viele Grüße
Axel
PS.: Ein solches vollständiges Kurzbeispiel von Dir oder ein Link zum hochgeladenen vollständigen Beispiel hätte einige Rückfragen hier ersparen können.
Hallo,
Ohne ID kennt der IE document.forms[0].elements['test'] nicht, mit ID schon. Er kennt aber document.forms[0].elements[3]. Das deutet darauf hin, dass das beim Setzen des name-Attributes via JavaScript vom IE das namedItem in der elements-Collection nicht ergänzt wird, sondern nur das Item.
Kann man das irgendwie ändern oder hinzufügen?
Gruß
Andi
PS.: Ein solches vollständiges Kurzbeispiel von Dir oder ein Link zum hochgeladenen vollständigen Beispiel hätte einige Rückfragen hier ersparen können.
PS.: Ok, das war meine Schuld :(
Hallo,
Ohne ID kennt der IE document.forms[0].elements['test'] nicht, mit ID schon. Er kennt aber document.forms[0].elements[3]. Das deutet darauf hin, dass beim Setzen des name-Attributes via JavaScript vom IE das namedItem in der elements-Collection nicht ergänzt wird, sondern nur das item.
Kann man das irgendwie ändern oder hinzufügen?
Da wüsste ich nicht wie. Die HTMLCollection hat keine explizite Methode add(item). Da der IE hier einen Fehler hat, weil eigentlich müsste appendChild() die Collection auch um ein namedItem erweitern, kann man nur drumrum arbeiten. Also entweder die IDs zusätzlich setzen oder die Methode von dedlfix verwenden, wobei man das "document.createElement('<input name="foobar">');" natürlich dann wieder vor standardkonformen Browsern verstecken muss.
viele Grüße
Axel
Hallo,
In Namearr stehen alle Namen der Inputfelder
Ist es nicht sinnlos, wenn man die NAmen aller Inputfelder speichert, um sie durchzugehen? Wenn es wirklich ALLE sind, dann schau dir mal getElementsByTagName() an, so kannst du alle Elemente mit Namen zB "input" finden und in ein array speichern.
Lukas
In Namearr stehen alle Namen der Inputfelder
Ist es nicht sinnlos, wenn man die NAmen aller Inputfelder speichert, um sie durchzugehen?
Nein es ist nicht sinnlos.
Formluarfelder werden mit ihren Namen angesprochen sowohl server- als auch clientseitig.
Struppi.
echo $begrüßung;
ich erstelle mit DOM ein Inputfeld:
input = document.createElement('INPUT');
input.setAttribute('type','text');
input.setAttribute('name','PA03RID['+PA03RID+']['+i+'][SP]['+hDefine+']');
Ich habe die Erfahrung gemacht, dass der IE hier irgendwie kaputt ist. Weder mit setAttribute noch mit input.name=... lässt sich der Name nachträglich ordentlich setzen. Wenn man sich input.outerHTML ausgeben lässt, ist name einfach nicht vorhanden.
Meine Lösung für das Problem sieht so aus:
document.createElement('<input name="foobar">');
echo "$verabschiedung $name";
echo $begrüßung;
Meine Lösung für das Problem sieht so aus:
document.createElement('<input name="foobar">');
Wie ich soeben nachlas, ist das anscheinend kein Fehler. Laut MSDN wird das ausdrücklich so empfohlen (jedenfalls für den IE):
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createelement.asp
Ebenfalls in dem Zusammenhang interessant:
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/name_2.asp
echo "$verabschiedung $name";