Dlaczego textarea nie jest danymi wejściowymi [type = „textarea”]?

153

Dlaczego <textarea>zamiast elementu jest element <input type="textarea">?

Diogo Cardoso
źródło
1
Nawiasem mówiąc, jest też <select>zamiast <input type="select">. Po <input>prostu reprezentuje podstawowy element wejściowy. typeAtrybut tylko reprezentuje typ wartości w jego posiadaniu.
BalusC

Odpowiedzi:

176

Może to trochę za daleko, ale…

Chciałbym również zasugerować, że wielowierszowe pola tekstowe mają inny typ (np. „Textarea”) niż pola jednowierszowe („tekst”), ponieważ w rzeczywistości są to różne typy rzeczy i implikują różne kwestie (semantykę) dla obsługa po stronie klienta.

- Marc Andreessen, 11 października 1993

Marcel
źródło
18
Tak, „inny typ”, czy to samo nie można osiągnąć za pomocą <input type = "textarea"> bla bla \ n \ n bla </input>? Dlaczego odrębny tag?
Serhiy
8
w3c jest dość spójny. to było przed w3c
Mark Cidade
10
Zastanawiam się, jak to zyskało tak dużo głosów Pytanie nie dotyczy różnicy między „text” a „textarea”, ale powodem włączenia wielowierszowego tekstu jako znacznika <textarea>, a nie jako atrybutu „type = textarea” w tagu <input>.
Foreever
6
@ Na zawsze jest to tak bezpośrednia odpowiedź, jak tylko się da. Przyczyną takiego textareaelementu jest to, że Marc Andreessen zaproponował go w październiku 1993 r. Z powodów wymienionych powyżej.
Marcel
5
@Marcel Marc Andreessen zasugerował, że powinien istnieć inny typ, a nie tag . Istnieją różne typy danych wejściowych oznaczone różnymi wartościami typeatrybutu inputtagu i wszystkie mają ten sam inputtag. Więc nie, ten cytat nie jest odpowiedzią na to pytanie.
Piotr Dobrogost
69

Aby jego wartość mogła z łatwością zawierać cudzysłowy i znaki <> oraz uwzględniać spacje i znaki nowej linii.

Poniższy kod HTML pomyślnie przeszedł walidator w3c i wyświetla <,> oraz & bez potrzeby ich kodowania. Szanuje również białe spacje.

<!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
źródło
16
Wolałbym mit o pochodzeniu w3c.
k do z
9
Textarea elementy nie są zdefiniowane jako zawierające CDATA, trzeba jeszcze do użytku dla podmiotów <, &itp Jest tak może obsłużyć spacje.
Quentin
Właśnie to przetestowałem i tak, możesz umieścić niezakodowane <,> i & w obszarze tekstowym. I pomyślnie przeszedł walidator w3c.
Guillaume Esquevin,
@ktothez: Zobacz moją odpowiedź .
Marcel
2
Nie ma tu jednej właściwej odpowiedzi. Podobnie jak w przypadku życia w ogóle (tj. Poza pudełkiem), istnieje wiele powodów, dla których coś jest takie, jakie jest.
JohnK
49

A textareamoże zawierać wiele wierszy tekstu, więc nie można byłoby go wstępnie wypełnić za pomocą valueatrybutu.

Podobnie selectelement musi być własnym elementem, aby pomieścić optionelementy podrzędne.

Mark Cidade
źródło
1
Dlaczego nie można by go wypełnić valueatr? Przepełnienie zawija do następnej linii przy zmianie rozmiaru textareamimo wszystko.
OJFord,
3
nie możesz używać znaków końca linii w atrybutach
Mark Cidade
23

Było to ograniczenie technologii w czasie jej tworzenia. Moja odpowiedź została skopiowana od Programmers.SE :

Z jednej z oryginalnych wersji roboczych HTML :

UWAGA: W początkowym projekcie formularzy wielowierszowe pola tekstowe były obsługiwane przez element wejściowy z TYPE = TEKST. Niestety powoduje to problemy w przypadku pól z długimi wartościami tekstowymi. Wartość domyślna SGML (Reference Quantity Set) ogranicza długość literałów atrybutów do tylko 240 znaków. Deklaracja HTML 2.0 SGML zwiększa limit do 1024 znaków.

Izkata
źródło
6

Zdaję sobie sprawę, że to starszy post, ale pomyślałem, że może to być pomocne dla każdego, kto zastanawia się nad tym samym pytaniem:

Chociaż poprzednie odpowiedzi są bez wątpienia ważne, istnieje prostszy powód rozróżnienia między obszarem tekstowym a danymi wejściowymi.

Jak wspomniano wcześniej, HTML jest używany do opisywania i nadawania możliwie największej struktury semantycznej zawartości sieci Web, w tym formularzy wejściowych. Pole tekstowe może być używane do wprowadzania danych, jednak obszar tekstowy może być również oznaczony jako tylko do odczytu za pomocą atrybutu tylko do odczytu. Istnienie takiego atrybutu nie miałoby sensu dla typu danych wejściowych , a tym samym dla rozróżnienia.

Chas Latch
źródło
9
Brzmi to rozsądnie, z wyjątkiem tego, że input[type="text"]może również przyjąć atrybut readonly . Co jest trochę dziwne, skoro już to wskazałeś! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt