ritschmanhard: textarea, value, gezeigter Text in HTML & JS

Hi!
Und nochmal ich, allerdings zu einem anderen Thema:
Ich hatte heute mit einer textarea zu kämpfen. Dabei gibt es etwas, das ich nicht ganz verstehe:
http://de.selfhtml.org/html/formulare/eingabe.htm#bereiche_vorbelegung@title=textarea(html) besagt, dass es KEIN value Attribut gibt. OK.
http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#textarea@title=textarea(javascript) setzt nun den Wert des textfeldes über die Objekt-Eigenschaft value.
Das erscheint mir schon mal wenig konsistent, allerdings könnte value hier  den Inhalt des Knotens referenzieren.
.
Aus alter Gewohnheit hatte ich nun (da in HTML textarea kein value existiert) folgende Konstruktion am Start (die bei textnodes den Inhalt des Knotens referenziert):

  
document.getElementById("textfeldID").firstChild.data = document.getElementById("textfeldID").firstChild.data + " blablabla";  

Dieses funktioniert auch (im FF, other untested), es wird in der textarea dargestellt:
Originaltext blablabla
Wenn man dieses aber nun submitted (textarea als Bestandteil eines Formulars), so fehlt das angehängte blablabla.
Nur wenn folgende Konstruktion verwendet wird, wird alles Übertragen:

  
document.getElementById("textfeldID").value = document.getElementById("textfeldID").value + " blablabla";  

Warum ist das so?

Grüße,
Richard

  1. Hallo,

    Warum ist das so?

    Gegenfrage: Warum ist die Banane krumm?
    Ernsthaft: Da gibt es keine wirklich plausible Erklärung für, das ist einfach so gewachsen bzw. die Macher diverser Spezifikationen hielten das für sinnvoll.
    Dass die Textarea beim Notieren im Markup anders als z.B. input gelöst ist, nämlich nicht als leeres Element, ist ein rein praktisches Erfordernis. Dass im DOM aber alle (na gut, fast alle) Formularelemente über die Eigenschaft value verfügen, finde ich hingegen sehr nützlich und konsistent.
    Letztlich sind es auch einfach historische Entscheidungen. Als es value in Netscapes JavaScript schon gab, gab es das DOM noch gar nicht. Und später hat diesen Layer m.M.n. bewusst übernommen, der von der Knotenstruktur abstrahiert und eine Textarea als Formular-Widget mit einem Wert betrachtet, der schnell über die value-Eigenschaft zugänglich ist.

    Mathias

  2. Nur wenn folgende Konstruktion verwendet wird, wird alles Übertragen:

    document.getElementById("textfeldID").value = document.getElementById("textfeldID").value + " blablabla";

    
    >   
    > Warum ist das so?  
      
    Weil das das value Attribut des Elementes ist. Das hat nichts mit dem HTML Attribut zu tun:  
    `<textarea onclick="alert(this.value)">wert</textarea>`{:.language-html}  
      
    Das es inkonsistent ist, mag sein, da du aber Zeilenumbrüche in einer Textarea platzieren kannst, wäre ein HTML Attribut ungünstig.  
      
    Struppi.
    
    1. Hi Struppi,

      Danke für die Antwort - das erklärt im Prinzip den ersten Teil der Frage - wie bereits vermutet, haben die beiden "values" (html/javascript) nichts mit einander zu tun (das hatte mir cheatah bezüglich "name" schon mal erklärt).

      Allerdings bleibt noch die Frage wegen des ".firstChild.data" Zugriffs und der Folge, dass dann übertragene Wert und der angezeigte Inhalt nicht identisch sind (insbesondere, da ich ja existierenden Inhalt korrekt mit .firstChild.data in Javascript ermitteln kann).

      Grüße,
      Richard