Hi,
Jedoch "verschwinden" die Objekte noch während des ersten Schleifendurchlaufs aus dem Array.. gehen einfach verloren.
Nein, das tun sie ganz und gar nicht.
Aber wenn du hier
var dateObjs = [];
for (i = 0; i < form.elements.length; i++) {
if (form.elements[i].tagName == "INPUT" &&
form.elements[i].type == "text")
dateObjs[dateObjs.length] = new dateObj(form.elements[i]);
}
for (j = 0; j < dateObjs.length; j++) {
dateObjs[j].analyzeInput();
if (dateObjs[j].isString) for (j = 0; j < dateObjs.length; j++)
dateObjs[j].validateString();
if (dateObjs[j].error)
alert(dateObjs[j].errorMsg);
}
mal im Firebug den Wert der Zaehlervariablen j deiner zweiten for-Schleife beobachtest, dann siehst du, dass du mit der "ploetzlich" den Bereich verlaesst, in dem sie laufen *sollte*.
Und das ist ja auch kein Wunder, weil du in der validateString-Methode deines dateObj-Objekte ihren Wert ueberschreibst:
// Prüft, ob die Eingabe einem der Schlüsselwörter entspricht
this.validateString = function() {
if (this.isString && !this.isValidated) {
for (i = 0; i < keywords.length; i++) {
for (j = 0; j < keywords[i].length; j++) {
//...
Da benutzt du ebenfalls eine Variable namens j - und da beide global sind, ueberschreibt dir "dieses" j hier dein "anderes" j aus der anderen Schleife - womit du dort bei der Rueckkehr aus dieser Methode natuerlich einen Fehler erzeugst, denn das Array, auf das dort mit dem Index j zugegriffen werden soll, hat gar nicht so viele Elemente.
Einfache Loesung: Verwende keine globalen (Zaehler-)Variablen, sondern lokale.
In einer For-Schleife erreichst du das ganz leicht, dass die Zaehlervariable nur lokale Gueltigkeit hat, in dem du dort das Schluesselwort var voranstellst:
for (var j = 0; j < dateObjs.length; j++) { ... }
for (var j = 0; j < keywords[i].length; j++) { ... }
MfG ChrisB
„This is the author's opinion, not necessarily that of Starbucks.“