Perché textarea non è un input [type = "textarea"]?


153

Perché c'è un elemento <textarea>invece di <input type="textarea">?


1
A proposito c'è anche un <select>invece di <input type="select">. Il <input>just rappresenta un elemento di input di base. L' typeattributo rappresenta solo il tipo di valore che detiene.
BalusC,

Risposte:


176

Forse questo sta andando un po 'troppo indietro ma ...

Inoltre, vorrei suggerire che i campi di testo multilinea hanno un tipo diverso (ad es. "Textarea") rispetto ai campi a riga singola ("testo"), in quanto sono realmente diversi tipi di cose e implicano problemi diversi (semantica) per gestione lato client.

- Marc Andreessen, 11 ottobre 1993


18
Sì, "tipo diverso", non è stato possibile ottenere lo stesso tramite <input type = "textarea"> blah blah \ n \ n blah </input>? Perché un tag distinto?
Serhiy,

8
w3c è abbastanza coerente. questo era prima del w3c
Mark Cidade,

10
Mi chiedo come questo abbia ottenuto così tanto voto. La domanda non riguarda la differenza tra 'text' e 'textarea', ma il motivo per includere il testo multilinea come tag <textarea> piuttosto che come attributo 'type = textarea' nel tag <input>.
sempre il

6
@Foreever questa è una risposta tanto diretta quanto arriva. La ragione per cui c'è un textareaelemento è perché Marc Andreessen lo ha proposto nell'ottobre 1993 per i motivi sopra citati.
Marcel,

5
@Marcel Marc Andreessen ha suggerito che ci dovrebbe essere un tipo diverso non tag . Esistono diversi tipi di input indicati da diversi valori di typeattributo del inputtag e condividono tutti lo stesso inputtag. Quindi no, questa citazione non è una risposta a questa domanda.
Piotr Dobrogost,

69

In modo che il suo valore possa contenere facilmente virgolette e <> caratteri e rispettare spazi bianchi e righe.

Il seguente codice HTML passa correttamente il validatore w3c e visualizza <,> e & senza la necessità di codificarli. Rispetta anche gli spazi bianchi.

<!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>

16
Preferirei un mito sull'origine del w3c.
k alla z

9
Textarea elementi non sono definiti come contenenti CDATA, è ancora necessario per uso enti per <, &, ecc E 'solo così che può gestire gli spazi bianchi.
Quentin,

L'ho appena testato e sì, puoi inserire <,> non codificato e & all'interno di una textarea. E ha superato con successo il validatore w3c.
Guillaume Esquevin,

@ktothez: vedi la mia risposta .
Marcel,

2
Non c'è una risposta adeguata qui. Come con la vita in generale (cioè fuori da una scatola) ci sono molte ragioni per cui qualcosa è come è.
JohnK,

49

A textareapuò contenere più righe di testo, quindi non si sarebbe in grado di precompilarlo usando un valueattributo.

Allo stesso modo, l' selectelemento deve essere il proprio elemento per accogliere i optionsotto-elementi.


1
Perché non si sarebbe in grado di popolarlo con l' valueattr? L'overflow passa alla riga successiva al ridimensionamento di textareacomunque.
OJFord,

3
non puoi usare le interruzioni di riga negli attributi
Mark Cidade,

23

Era una limitazione della tecnologia al momento della sua creazione. La mia risposta è stata copiata da Programmers.SE :

Da una delle bozze HTML originali :

NOTA: nella progettazione iniziale per i moduli, i campi di testo multilinea erano supportati dall'elemento Input con TYPE = TEXT. Sfortunatamente, ciò causa problemi per i campi con valori di testo lunghi. L'impostazione predefinita di SGML (set di quantità di riferimento) limita la lunghezza dei valori letterali degli attributi a soli 240 caratteri. La dichiarazione SGML HTML 2.0 aumenta il limite a 1024 caratteri.


6

Mi rendo conto che questo è un post più vecchio, ma ho pensato che potesse essere utile a chiunque si chiedesse la stessa domanda:

Sebbene le risposte precedenti siano senza dubbio valide, esiste una ragione più semplice per la distinzione tra textarea e input.

Come accennato in precedenza, l'HTML viene utilizzato per descrivere e fornire il maggior numero possibile di strutture semantiche al contenuto Web, inclusi i moduli di input. È possibile utilizzare un'area di testo per l'input, tuttavia è possibile contrassegnare un'area di testo come sola lettura tramite l'attributo readonly. L'esistenza di un tale attributo non avrebbe alcun senso per un tipo di input , e quindi la distinzione.


9
Sembra ragionevole, tranne per il fatto che input[type="text"]può assumere anche l' attributo readonly . Il che è strano, ora che lo fai notare! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.