ตอบกลับไม่สนใจแอตทริบิวต์ 'for' ขององค์ประกอบป้ายกำกับ


250

ใน React (เฟรมเวิร์กของ Facebook) ฉันต้องแสดงองค์ประกอบป้ายกำกับที่ผูกไว้กับการป้อนข้อความโดยใช้forแอตทริบิวต์มาตรฐาน

เช่นใช้ JSX ต่อไปนี้:

<label for="test">Test</label>
<input type="text" id="test" />

อย่างไรก็ตามสิ่งนี้ทำให้ HTML ขาดforแอตทริบิวต์(และมาตรฐาน) ที่ต้องการ

<label>Test</label>
<input type="text" id="test">

ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


484

forแอตทริบิวต์ที่เรียกว่าhtmlForสำหรับความสอดคล้องกับ API คุณสมบัติ DOM หากคุณกำลังใช้โครงสร้างการพัฒนาของ React คุณควรเห็นคำเตือนในคอนโซลของคุณเกี่ยวกับสิ่งนี้


4
ขอบคุณเบ็น คุณช่วยอธิบาย "ความสอดคล้องกับ DOM API" ให้ฉันได้ไหม
goofballLogic

17
หากคุณมีlabelองค์ประกอบ (กลับมาเป็นตามdocument.createElement, document.getElementByIdฯลฯ ) ที่คุณต้องการเข้าถึงของทรัพย์สินfor label.htmlFor
Sophie Alpert

3
@Meglio ใน HTML คุณต้องมี ID เพื่อให้แอตทริบิวต์ for ใช้งานได้ ในการทำให้องค์ประกอบของคุณสามารถนำกลับมาใช้ใหม่ได้คุณสามารถเพิ่มคุณสมบัติชื่อให้กับองค์ประกอบที่คุณตั้งเป็น ID และเป็นชื่อแอตทริบิวต์ในช่องป้อนข้อมูลจริง
Wim Mostmans

2
ไม่เป็นไรผมพบคำตอบที่นี่ พวกเขาบอกว่าจะใช้เครื่องกำเนิด ID
Tobia

2
@ BenAlpert ขอบคุณสำหรับการส่องสว่างที่ ฉันไม่เคยดู DOM API เพราะ jQuery และสิ่งของ (โปรดยกโทษให้ฉันด้วย) แต่ในกรณีที่คนอื่นมีความสนใจในการเรียนรู้เพิ่มเติมเกี่ยวกับที่ตรวจสอบdeveloper.mozilla.org/en-US/docs/Web/API/HTMLLabelElement
alvincrespo


13

สำหรับการตอบสนองคุณต้องใช้คำหลักต่อการกำหนดเพื่อกำหนดคุณลักษณะ html

class -> className

ถูกใช้และ

for -> htmlFor

มีการใช้เนื่องจากปฏิกิริยาจะคำนึงถึงขนาดตัวพิมพ์เล็กและตัวใหญ่ต้องแน่ใจว่าคุณต้องติดตามตัวเล็กและตัวใหญ่ตามที่ต้องการ


3

ทั้งสองforและclassเป็นคำที่สงวนไว้ในจาวาสคริปต์นี่คือเหตุผลว่าทำไมเมื่อมาถึงคุณลักษณะ HTML ใน JSX คุณต้องใช้อย่างอื่นทีมตอบโต้จึงตัดสินใจใช้htmlForและclassNameตามลำดับ


1
มันไม่มีส่วนเกี่ยวข้องกับสิ่งนั้น การแปลง JSX สามารถแปลเป็น 'คลาส' ซึ่งใช้ได้สำหรับชื่อคุณสมบัติ ในความเป็นจริงใน Preact คุณสามารถใช้ทั้ง class และ className
Malte R

3
ในขณะที่ React สามารถแปลงเป็น JSX ได้ เอกสารของพวกเขา (ณ วันที่ 25 มี.ค. 2020) ระบุว่า "เนื่องจากforเป็นคำที่สงวนไว้ใน JavaScript จึงใช้องค์ประกอบการตอบสนองhtmlForแทน": reactjs.org/docs/dom-elements.html#htmlfor
nirvdrum

@MalteR คุณสามารถบอกกับ IE8, IE7 และ IE6
Trident D'Gao


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.