Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
forms.elements beinhaltet nicht nur INPUT-Felder [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
forms.elements beinhaltet nicht nur INPUT-Felder


 
PHP-Master07
09-08-2010, 22:24 
 
Ich möchte alle Eingaben eines Formulares mit AJAX an den Browser übermitteln. Ich möchte eine Funktion schreiben, die alle INPUT-Felder im FORM-Element in ein assoziatives Array schreibt. Dabei soll das 'name'-Attribut der Schlüssel sein und das 'value'-Attribut der Inhalt. (Also nach dem gleichen Schema wie die POST-Variable in PHP.)

Wenn ich nun myForm.elements (wobei 'myForm' mein Formular ist), so enthält der Array am Ende drei Elemente, die im HTML-Quellcode aber nicht als INPUT-Felder zu erkennen sind:
[undefined] => undefined
[item] => undefined
[namedItem] => undefined
Wenn ich myForm.getElementsByTagName("input") schreibe, ändert sich auch nichts.

Woher kommen diese drei Elemente und was kann ich machen, damit ich wirklich nur alle INPUT-Felder (und sonst nichts) erhalte?

Danke schon mal für eure Mühe. :)

 
AmicaNoctis
09-08-2010, 23:42 
 
Hallo,

arbeite die elements-Property einfach als Array ab (mit for-Schleife und length statt for…in), dann passiert das nicht.

Gruß,

Amica

 
PHP-Master07
10-08-2010, 21:10 
 
Danke, jetzt funktioniert es.

Worin liegt jetzt der Unterschied zwischen for(var i in forms.elements) und for(var i = 0; forms.elements.length; i++)?

Kann mir jemand das Schlüsselwort verraten, zu dem ich auf Google eine Erklärung dafür finde?

 
AmicaNoctis
10-08-2010, 21:27 
 
Die erste Variante (for-in-Schleife) iteriert über Objekte und liefert alle enthaltenen Eigenschaftsnamen. Arrays sind besondere Objekte, die zunächst erstmal die Eigenschaften 0 bis N besitzen, darüberhinaus aber auch noch weitere (z. B. length), die in diesem Falle natürlich auch abgerufen werden.

Die zweite Variante (normale for-Schleife) ist daher für Arrays besser geeignet, weil man die length-Eigenschaft als Schleifenbedingung benutzen kann (ohne sie jedoch im Ergebnis haben zu wollen) und nur die numerischen Eigenschaften (0 bis N) als Ergebnis abruft.

 
eagle275
13-08-2010, 09:38 
 
du könntest natürlich auch einfach auf "undefined" testen (if) und das als Abbruchbedingung bei deiner Verarbeitung nehmen ....

 
wahsaga
13-08-2010, 14:17 
 
Das wäre aber nicht sonderlich einfacher, als einfach eine for-Schleife zu nehmen.

for-in ist für sowas weder gedacht, noch sonderlich geeignet.

 
PHP-Master07
14-08-2010, 10:11 
 
Danke für eure Hilfe!

Ich habe im Internet nun auch einiges bzgl. "Assoziative Arrays in Javascript" gelesen und verstehe jetzt das Verhalten.


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:08 Uhr.