Warum ist Textarea keine Eingabe [type = “textarea”]?

153

Warum gibt es ein Element <textarea>anstelle von <input type="textarea">?

Diogo Cardoso
quelle
1
Es gibt übrigens auch ein <select>statt <input type="select">. Das <input>just stellt ein grundlegendes Eingabeelement dar. Das typeAttribut repräsentiert nur den Typ des Wertes, den es enthält.
BalusC

Antworten:

176

Vielleicht geht das etwas zu weit zurück, aber ...

Außerdem möchte ich vorschlagen, dass mehrzeilige Textfelder einen anderen Typ (z. B. "Textbereich") haben als einzeilige Felder ("Text"), da es sich tatsächlich um unterschiedliche Arten von Dingen handelt und unterschiedliche Probleme (Semantik) für clientseitiges Handling.

- Marc Andreessen, 11. Oktober 1993

Marcel
quelle
18
Ja, "anderer Typ", konnte nicht dasselbe über <input type = "textarea"> bla bla \ n \ n bla </ input> erreicht werden? Warum ein eindeutiges Tag?
Serhiy
8
w3c ist ziemlich konsistent. Dies war vor w3c
Mark Cidade
10
Ich frage mich, wie das so viel Aufsehen erregt hat. Bei der Frage geht es nicht um den Unterschied zwischen "Text" und "Textbereich", sondern um den Grund, warum der mehrzeilige Text als <textarea> -Tag und nicht als "type = textarea" -Attribut in das <input> -Tag aufgenommen wird.
foreever
6
@ Für immer ist dies eine so direkte Antwort wie es nur geht. Der Grund dafür textareaist, dass Marc Andreessen es bereits im Oktober 1993 aus den oben genannten Gründen vorgeschlagen hat.
Marcel
5
@Marcel Marc Andreessen schlug vor, dass es einen anderen Typ ohne Tag geben sollte . Es gibt verschiedene Arten von Eingaben, die durch unterschiedliche Werte des typeAttributs des inputTags gekennzeichnet sind, und alle teilen sich ein und dasselbe inputTag. Also nein, dieses Zitat ist keine Antwort auf diese Frage.
Piotr Dobrogost
69

Damit sein Wert leicht Anführungszeichen und <> Zeichen enthalten und Leerzeichen und Zeilenumbrüche berücksichtigen kann.

Der folgende HTML-Code besteht erfolgreich den w3c-Validator und zeigt <,> und & an, ohne dass diese codiert werden müssen. Es respektiert auch die Leerzeichen.

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Yes I can</title>
</head>
<body>
    <textarea name="test">
        I can put < and > and & signs in 
        my textarea without any problems.
    </textarea>
</body>
</html>
Guillaume Esquevin
quelle
16
Ich würde einen w3c-Ursprungsmythos bevorzugen.
k bis z
9
TextArea- Elemente sind nicht als enthält CDATA definiert sind , müssen Sie noch zu verwenden Entitäten für <, &usw. Es ist nur so ist es Leerzeichen umgehen kann.
Quentin
Ich habe es gerade getestet und ja, Sie können nicht codierte <,> und & in einen Textbereich einfügen. Und es hat den w3c-Validator erfolgreich bestanden.
Guillaume Esquevin
@ktothez: Siehe meine Antwort .
Marcel
2
Hier gibt es keine richtige Antwort. Wie im Leben im Allgemeinen (dh außerhalb einer Box) gibt es mehrere Gründe dafür, dass etwas so ist, wie es ist.
JohnK
49

A textareakann mehrere Textzeilen enthalten, sodass man es nicht mit einem valueAttribut vorab ausfüllen kann .

Ebenso muss das selectElement ein eigenes Element sein, um optionUnterelemente aufzunehmen.

Mark Cidade
quelle
1
Warum könnte man es nicht mit dem valueattr füllen? Der Überlauf wird bei der Größenänderung des textareaohnehin in die nächste Zeile umgebrochen .
OJFord
3
Sie können keine Zeilenumbrüche in Attributen verwenden
Mark Cidade
23

Dies war eine Einschränkung der Technologie zum Zeitpunkt ihrer Erstellung. Meine Antwort wurde von Programmers.SE kopiert :

Aus einem der ursprünglichen HTML-Entwürfe :

HINWEIS: Beim ursprünglichen Entwurf für Formulare wurden mehrzeilige Textfelder vom Eingabeelement mit TYPE = TEXT unterstützt. Dies führt leider zu Problemen bei Feldern mit langen Textwerten. Die Standardeinstellung von SGML (Reference Quantity Set) begrenzt die Länge von Attributliteralen auf nur 240 Zeichen. Die HTML 2.0 SGML-Deklaration erhöht das Limit auf 1024 Zeichen.

Izkata
quelle
6

Mir ist klar, dass dies ein älterer Beitrag ist, aber ich dachte, dies könnte für jeden hilfreich sein, der sich die gleiche Frage stellt:

Während die vorherigen Antworten zweifellos gültig sind, gibt es einen einfacheren Grund für die Unterscheidung zwischen Textbereich und Eingabe.

Wie bereits erwähnt, wird HTML verwendet, um Webinhalte, einschließlich Eingabeformulare, so semantisch wie möglich zu beschreiben und zu strukturieren. Ein Textbereich kann zur Eingabe verwendet werden, ein Textbereich kann jedoch auch über das Attribut readonly als schreibgeschützt markiert werden. Das Vorhandensein eines solchen Attributs würde für einen Eingabetyp und damit für die Unterscheidung keinen Sinn ergeben .

Chas Latch
quelle
9
Dies klingt vernünftig, außer dass input[type="text"]auch das Attribut readonly verwendet werden kann. Was irgendwie seltsam ist, jetzt wo Sie darauf hinweisen! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt