Mengapa textarea bukan input [type = "textarea"]?

153

Mengapa ada unsur <textarea>bukan <input type="textarea">?

Diogo Cardoso
sumber
1
Ada omong-omong juga <select>bukan <input type="select">. The <input>hanya merupakan elemen input dasar. The typeatribut hanya mewakili jenis nilai yang dimilikinya.
BalusC

Jawaban:

176

Mungkin ini agak terlalu jauh ke belakang tapi ...

Juga, saya ingin menyarankan bahwa bidang teks multiline memiliki tipe yang berbeda (misalnya "textarea") daripada bidang baris tunggal ("teks"), karena mereka benar-benar jenis yang berbeda, dan menyiratkan masalah yang berbeda (semantik) untuk penanganan sisi klien.

- Marc Andreessen, 11 Oktober 1993

Marcel
sumber
18
Ya, "tipe berbeda", tidak bisakah hal yang sama dicapai melalui <input type = "textarea"> bla bla \ n \ n bla </input>? Mengapa ada tag yang berbeda?
Serhiy
8
w3c cukup konsisten. ini sebelum w3c
Mark Cidade
10
Saya bertanya-tanya bagaimana ini bisa mendapatkan banyak suara. Pertanyaannya bukan tentang perbedaan antara 'teks' dan 'textarea', tetapi alasan untuk memasukkan teks multi-baris sebagai tag <textarea> bukan sebagai atribut 'type = textarea' dalam tag <input>.
Foreever
6
@Foreever ini tentang jawaban langsung karena mendapat. Alasan ada textareaelemen adalah karena Marc Andreessen mengusulkannya kembali pada Oktober 1993 dengan alasan seperti dikutip di atas.
Marcel
5
@ Marc Marc Andreessen menyarankan bahwa harus ada jenis yang berbeda bukan tag . Ada berbagai jenis input yang ditandai oleh nilai typeatribut inputtag yang berbeda dan semuanya memiliki satu dan inputtag yang sama . Jadi tidak, kutipan ini bukan jawaban untuk pertanyaan ini.
Piotr Dobrogost
69

Sehingga nilainya dapat dengan mudah memuat tanda kutip dan <> karakter dan menghormati spasi putih dan baris baru.

Kode HTML berikut berhasil melewati validator w3c dan menampilkan <,> dan & tanpa perlu menyandikannya. Ini juga menghormati ruang putih.

<!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
sumber
16
Saya lebih suka mitos asal w3c.
k ke z
9
Textarea elemen tidak didefinisikan sebagai mengandung CDATA, Anda masih perlu entitas digunakan untuk <, &, dll hanya sehingga dapat menangani spasi.
Quentin
Saya baru saja mengujinya dan ya, Anda dapat memasukkan <,> dan & tanpa teks ke dalam textarea. Dan itu berhasil melewati validator w3c.
Guillaume Esquevin
@ ktothez: Lihat jawaban saya .
Marcel
2
Tidak ada satu jawaban yang tepat di sini. Seperti halnya kehidupan pada umumnya (yaitu, di luar kotak) ada beberapa alasan untuk sesuatu menjadi apa adanya.
JohnK
49

A textareadapat berisi beberapa baris teks, jadi seseorang tidak akan dapat mengisinya terlebih dahulu menggunakan valueatribut.

Demikian pula, selectelemen perlu elemen sendiri untuk mengakomodasi optionsub-elemen.

Mark Cidade
sumber
1
Mengapa orang tidak bisa mengisinya dengan valueattr? Overflow membungkus ke baris berikutnya pada mengubah ukuran textareapula.
OJFord
3
Anda tidak dapat menggunakan jeda baris pada atribut
Mark Cidade
23

Itu adalah keterbatasan teknologi pada saat itu diciptakan. Jawaban saya disalin dari Programmers.SE :

Dari salah satu konsep HTML asli :

CATATAN: Dalam desain awal untuk formulir, bidang teks multi-baris didukung oleh elemen Input dengan TYPE = TEXT. Sayangnya, ini menyebabkan masalah untuk bidang dengan nilai teks yang panjang. Default SGML (Reference Quantity Set) membatasi panjang literal atribut menjadi hanya 240 karakter. Deklarasi HTML 2.0 SGML meningkatkan batas hingga 1024 karakter.

Izkata
sumber
6

Saya menyadari ini adalah posting yang lebih lama, tetapi berpikir ini mungkin bermanfaat bagi siapa saja yang bertanya pertanyaan yang sama:

Sementara jawaban sebelumnya tidak diragukan lagi valid, ada alasan yang lebih sederhana untuk perbedaan antara textarea dan input.

Seperti yang disebutkan sebelumnya, HTML digunakan untuk menggambarkan dan memberikan sebanyak mungkin struktur semantik untuk konten web, termasuk formulir input. Textarea dapat digunakan untuk input, namun textarea juga dapat ditandai sebagai read only melalui atribut readonly. Keberadaan atribut seperti itu tidak masuk akal untuk tipe input , dan dengan demikian perbedaan.

Chas Latch
sumber
9
Ini terdengar masuk akal, kecuali itu input[type="text"]dapat mengambil atribut readonly juga. Yang agak aneh, sekarang Anda tunjukkan! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt