Homepage de.comp.lang.javascript
Homepage
de.comp.lang.javascript

FAQ de.comp.lang.javascript

FAQ
de.comp.lang.javascript

 

 

Bitte verwenden Sie als Einstiegsadresse in diese FAQ die Homepage der Newsgroup de.comp.lang.javascript. Der Aufenthaltsort dieser Seiten hier kann sich ohne Vorwarnung ändern.
 

 

Wie handhabe ich besondere Zeichen in Namen von Formularelementen?

JavaScript wird häufig eingesetzt, um Formularinhalte vor dem Absenden auf Konsistenz zu überprüfen. Zwar erspart man sich damit nicht die obligatorische serverseitige Prüfung, da Clients ohne JavaScript-Fähigkeit ja trotzdem ungeprüfte Formulardaten senden könnten. Jedoch kann man mit solch einer Vorab-Überprüfung Server- und Netzwerklast reduzieren. Wie eine Formularprüfung per JavaScript grundsätzlich aufgebaut sein sollte, ist auf der Seite Wie prüfe ich die Korrektheit von Formularfeldern vor dem Abschicken? beschrieben. Eine Anweisung zur Überprüfung in der dort vorgestellten Funktion lautet bspw.:

  if (document.formular.namen.value == '') {
    error = true;
  }

Benutzer, die diese Funktion in ihre Seiten übernommen haben, berichten nun regelmäßig davon, daß diese Zeile bei ihnen einen Fehler verursacht. Betroffen sind vor allem Autoren, die serverseitig PHP einsetzen und ein Select-Element benötigen, dessen Name auf "[]" endet. Und mancher Benutzer eines kommerziellen Formmailers benötigt ein Formularelement namens "mail-to", das mit obiger Anweisung ein Problem bereitet:

  <select name="auswahl[]" multiple> ... </select>
  <input type="text" name="mail-to" /> ...

Versucht man nämlich, diese Elementnamen mit obiger Anweisung zu verwenden, erhät man einen Syntaxfehler oder eine Fehlermeldung, die besagt, dass ein Objekt oder eine Eigenschaft nicht bekannt sind. Beispiel:

  if (document.formular.mail-to.value == '') {
    error = true;
  }

Der Grund dafür ist trivial: das Zeichen "-" in "mail-to" wird vom JavaScript-Interpreter als Subtraktionsoperator ("Minuszeichen") aufgefasst, man weist ihn an: "Vergleiche die Differenz aus 'document.formular.mail' und 'to.value' mit der leeren Zeichenkette". Die beiden Operanden dieser (gar nicht beabsichtigten) Subtraktionsanweisung sind natürlich nicht bekannt, und genau dies führt zur Fehlermeldung.

Auch das Zeichen "[" in obigem "auswahl[]" ist Teil eines Operators in JavaScript und seine Verwendung führte an der genannten Stelle zu einem Syntaxfehler. Nur wenn solche Zeichen innerhalb einer Zeichenkette auftreten, werden sie nicht als Operatoren interpretiert. JavaScript kennt jedoch noch eine andere Möglichkeit, um Eigenschaften und Methoden von Objekten zu referenzieren. Um bspw. das erste Element eines Arrays "myArray" zu referenzieren, bewirken folgende zwei Notationen dasselbe:

  myArray[0]
  myArray.0

Grund: Die Element-Lookup-Operatoren "." und "[]" sind gleichwertig. Ebenso können wir bspw. mit einer Eigenschaft "farbe" eines Objekts "myObject" verfahren. Möglich sind hier die beiden Notationen:

  myObject.farbe
  myObject["farbe"]

Dies machen wir uns zunutze, um den Fehler zu beseitigen: da Formularelemente nichts anderes als Eigenschaften eines Formularobjekts sind, schreiben wir die oben genannte fehlerhafte Anweisung wie folgt um:

  if (document.formular["mail-to"].value == '') {
    error = true;
  }

Bei dieser Notation tritt der Name innerhalb einer Zeichenkette auf, das Zeichen "-" als Teil des Namens wird daher nicht als Operator interpretiert und es tritt kein Fehler mehr auf.

top

Diese Seite ist Teil der de.comp.lang.javascript FAQ. Die Einstiegsadresse lautet http://www.dcljs.de/. Der Text der Seite wurde erstellt von Dietmar H. G. Meier (©).

 ______ letzte Änderung: 12/2012 ______ 

 
© S. Mintert, Ch. Kühnel