ทำไม textarea ถึงไม่ป้อนข้อมูล [type =“ textarea”]?


153

เหตุใดจึงมีองค์ประกอบ<textarea>แทน<input type="textarea">?


1
มีโดยวิธีการนี้ยังมีการแทน<select> เพียงแสดงให้เห็นถึงองค์ประกอบขั้นพื้นฐาน แอตทริบิวต์เพียงแสดงถึงชนิดของค่าที่มันถือ <input type="select"><input>type
BalusC

คำตอบ:


176

บางทีนี่อาจจะไกลไปหน่อย แต่ ...

นอกจากนี้ฉันอยากจะแนะนำว่าฟิลด์ข้อความหลายบรรทัดมีประเภทที่แตกต่างกัน (เช่น "textarea") มากกว่าฟิลด์บรรทัดเดียว ("ข้อความ") เนื่องจากเป็นประเภทที่แตกต่างกันและบ่งบอกถึงปัญหาที่แตกต่างกัน (ความหมาย) สำหรับ การจัดการฝั่งไคลเอ็นต์

- Marc Andreessen, 11 ตุลาคม 1993


18
ใช่ "ประเภทที่แตกต่างกัน" ไม่สามารถทำได้แบบเดียวกันผ่าน <input type = "textarea"> blah blah \ n \ n blah </input>? ทำไมถึงแตกต่างแท็ก
Serhiy

8
w3c ค่อนข้างสอดคล้องกัน นี่เป็นก่อนหน้า w3c
Mark Cidade

10
ฉันสงสัยว่าสิ่งนี้มี upvote มากนี้ คำถามไม่ได้เกี่ยวกับความแตกต่างระหว่าง 'text' และ 'textarea' แต่เหตุผลในการรวมข้อความหลายบรรทัดเป็นแท็ก <textarea> แทนที่จะเป็นแอตทริบิวต์ 'type = textarea' ในแท็ก <input>
Foreever

6
@ ไม่ว่าจะเป็นคำตอบโดยตรงก็ตาม เหตุผลที่มีtextareaองค์ประกอบเป็นเพราะ Marc Andreessen เสนอให้มันกลับมาในเดือนตุลาคม 1993 ด้วยเหตุผลที่ยกมาข้างต้น
Marcel

5
@Marcel Marc Andreessen แนะนำว่าควรจะมีที่แตกต่างกันชนิดไม่ได้แท็ก มีอินพุตประเภทต่าง ๆ ที่แสดงโดยค่าtypeแอตทริบิวต์ของinputแท็กที่แตกต่างกันและพวกเขาทั้งหมดแบ่งปันหนึ่งและinputแท็กเดียวกัน ไม่เลยคำพูดนี้ไม่ใช่คำตอบสำหรับคำถามนี้
Piotr Dobrogost

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 คุณยังคงต้องใช้หน่วยงานสำหรับ<, &ฯลฯ มันเป็นเพียงเพื่อที่จะสามารถจัดการกับช่องว่าง
เควนติน

ฉันเพิ่งทดสอบและใช่คุณสามารถใส่รหัส <,> และ & ไว้ใน textarea ได้ และผ่านการตรวจสอบความถูกต้อง w3c ได้สำเร็จ
Guillaume Esquevin

@ktothez: ดูคำตอบของฉัน
Marcel

2
ไม่มีคำตอบที่เหมาะสมที่นี่ เช่นเดียวกับชีวิตโดยทั่วไป (เช่นอยู่นอกกล่อง) มีหลายเหตุผลสำหรับสิ่งที่เป็นอย่างที่มันเป็น
JohnK

49

A textareaสามารถมีข้อความได้หลายบรรทัดดังนั้นจะไม่สามารถเติมข้อมูลล่วงหน้าได้โดยใช้valueแอตทริบิวต์

ในทำนองเดียวกันselectองค์ประกอบจะต้องเป็นองค์ประกอบของตัวเองเพื่อรองรับoptionองค์ประกอบย่อย


1
ทำไมไม่มีใครสามารถเติมด้วยvalueattr ได้? โอเวอร์โฟลว์ไปที่บรรทัดถัดไปเพื่อปรับขนาดของtextareaใหม่
OJFord

3
คุณไม่สามารถใช้ตัวแบ่งบรรทัดในแอตทริบิวต์
Mark Cidade

23

มันเป็นข้อ จำกัด ของเทคโนโลยีในเวลาที่มันถูกสร้างขึ้น คำตอบของฉันถูกคัดลอกมาจาก Programmers.SE :

จากหนึ่งในร่าง HTMLดั้งเดิม:

หมายเหตุ: ในการออกแบบเริ่มต้นสำหรับแบบฟอร์มฟิลด์ข้อความแบบหลายบรรทัดได้รับการสนับสนุนโดยองค์ประกอบอินพุตพร้อม TYPE = TEXT น่าเสียดายที่สิ่งนี้ทำให้เกิดปัญหากับฟิลด์ที่มีค่าข้อความยาว ค่าเริ่มต้นของ SGML (ชุดปริมาณอ้างอิง) จำกัดความยาวของตัวอักษรแอตทริบิวต์ไว้ที่ 240 อักขระเท่านั้น การประกาศ SGML HTML 2.0 เพิ่มขีด จำกัด เป็น 1024 อักขระ


6

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่คิดว่าอาจเป็นประโยชน์กับทุกคนที่สงสัยคำถามเดียวกัน:

ในขณะที่คำตอบก่อนหน้านี้ไม่ต้องสงสัยเลยว่ามีเหตุผลง่าย ๆ สำหรับความแตกต่างระหว่าง textarea และการป้อนข้อมูล

ดังที่ได้กล่าวไว้ก่อนหน้านี้ HTML ถูกใช้เพื่ออธิบายและให้โครงสร้างความหมายของเนื้อหาเว็บมากที่สุดเท่าที่จะเป็นไปได้รวมถึงรูปแบบการป้อนข้อมูล textarea อาจใช้สำหรับการป้อนข้อมูลอย่างไรก็ตาม textarea ยังสามารถทำเครื่องหมายเป็นอ่านได้อย่างเดียวผ่านทางคุณลักษณะอ่านได้อย่างเดียว การมีอยู่ของคุณลักษณะดังกล่าวจะไม่ทำให้รู้สึกถึงประเภทอินพุตและทำให้ความแตกต่าง


9
สิ่งนี้ฟังดูสมเหตุสมผลยกเว้นว่าinput[type="text"]สามารถรับแอตทริบิวต์แบบอ่านอย่างเดียวได้เช่นกัน ตอนนี้คุณชี้มันออกมาแบบไหน! w3.org/TR/html-markup/input.text.html#input.text.attrs.readonly
Matt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.