Чому textarea не є входом [type = “textarea”]?


153

Чому <textarea>замість елемента існує елемент <input type="textarea">?


1
Там, до речі, також <select>замість <input type="select">. <input>Просто є основний елемент введення. typeАтрибут просто представляє тип значення , яке він тримає.
BalusC

Відповіді:


176

Можливо, це заходить занадто далеко назад, але ...

Також я хотів би запропонувати, що текстові поля багато рядків мають інший тип (наприклад, "textarea"), ніж однорядкові поля ("text"), оскільки вони насправді є різними типами речей, і мають на увазі різні питання (семантику) для обслуговування на стороні клієнта.

- Марк Андреессен, 11 жовтня 1993 року


18
Так, "різного типу", чи не вдалося досягти того ж через <input type = "textarea"> бла-бла \ n \ n бла </input>? Чому виразний тег?
Сергій

8
w3c досить послідовний. це було перед w3c
Марк Сідаде

10
Цікаво, як це отримало стільки результатів. Питання полягає не в різниці між 'text' та 'textarea', а в причині включення багаторядкового тексту як тег <textarea>, а не як атрибут 'type = textarea' у тег <input>.
Ніколи

6
@Після цього мова йде про настільки ж пряму відповідь, яку вона отримує. Причина є в textareaтому, що Марк Андрессен запропонував це ще в жовтні 1993 року з причин, зазначених вище.
Марсель

5
@Marcel Марк Андрєєссен припустив , що повинен бути інший тип НЕ тег . Існують різні типи введення, позначені різними значеннями typeатрибута inputтегу, і всі вони поділяють один і той же inputтег. Так ні, ця цитата не є відповіддю на це питання.
Пьотр Доброгост

69

Так що його значення може легко містити лапки та <> символи та поважати пробіли та нові рядки.

Наступний HTML-код успішно передає валідатор w3c та відображає <,> та & без необхідності їх кодування. Це також поважає білі простори.

<!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
Я вважаю за краще міф про походження w3c.
k до z

9
TEXTAREA елементи не визначені як містять CDATA, вам все ще потрібно для використання особами <, &і т.д. Це тільки так він може обробляти прогалини.
Квентін

Я щойно перевірив це, і так, ви можете розмістити незашифровані <,> та & у текстовій області. І він успішно проходить валідатор w3c.
Гійом Ескєвін

@ktothez: Дивіться мою відповідь .
Марсель

2
Тут немає жодної належної відповіді. Як і в житті загалом (тобто поза коробкою), існує багато причин, щоб щось було таким, яким воно є.
ДжонК

49

А textareaможе містити кілька рядків тексту, тому не можна було б попередньо заповнити його за допомогоюvalue атрибута.

Аналогічно, selectелемент повинен бути власним елементом для розміщенняoption піделементів.


1
Чому б не вдалося заселити його valueattr? Перетягніть переведення на наступний рядок із зміною розміру в textareaбудь-якому випадку.
OJFord

3
не можна використовувати переривки рядків у атрибутах
Марк Сідаде

23

Це було обмеженням технології на час її створення. Мою відповідь скопійовано з Programmers.SE :

З одного з оригінальних чернеток HTML :

ПРИМІТКА: У початковому дизайні форм багаторядкові текстові поля підтримували елемент Введення з TYPE = TEXT. На жаль, це спричиняє проблеми для полів з довгими текстовими значеннями. Типовий параметр SGML (Набір контрольної кількості) обмежує довжину літералів атрибутів лише 240 символами. Заява HTML 2.0 SGML збільшує обмеження до 1024 символів.


6

Я усвідомлюю, що це старіший пост, але я подумав, що це може бути корисним для тих, хто цікавиться тим самим питанням:

Незважаючи на те, що попередні відповіді, без сумніву, справедливі, є більш проста причина для розмежування текстових повідомлень та вхідних даних.

Як було сказано раніше, HTML використовується для опису та надання якомога більшої смислової структури веб-контенту, включаючи форми введення. Текстова область може використовуватися для введення, однак текстову область також можна позначати як прочитану лише за допомогою атрибута readonly. Існування такого атрибута не мало б сенсу для типу введення , а отже, і для розрізнення.


9
Це здається розумним, за винятком того, що також input[type="text"]можна приймати атрибут readonly . Що дивно, тепер, коли ви це вказуєте! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Метт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.