Những gì thuộc tính của Wikipedia cho nhóm làm gì trong thẻ <nhãn> HTML?


382

Tôi tự hỏi sự khác biệt giữa hai đoạn mã sau đây là gì:

<label>Input here : </label>
<input type='text' name='theinput' id='theinput'/>

<label for='theinput'>Input here : </label>
<input type='text' name='theinput' id='theinput'/>

Tôi chắc chắn rằng nó sẽ làm gì đó khi bạn sử dụng một thư viện JavaScript đặc biệt, nhưng ngoài điều đó ra, nó có xác nhận HTML hay được yêu cầu vì một số lý do khác không?

Câu trả lời:


578

Các <label>thẻ cho phép bạn click vào nhãn, và nó sẽ được đối xử như cách nhấp vào các yếu tố đầu vào liên quan. Có hai cách để tạo liên kết này:

Một cách là bọc phần tử nhãn xung quanh phần tử đầu vào:

<label>Input here:
    <input type='text' name='theinput' id='theinput'>
</label>

Một cách khác là sử dụng forthuộc tính, cung cấp cho nó ID của đầu vào được liên kết:

<label for="theinput">Input here:</label>
<input type='text' name='whatever' id='theinput'>

Điều này đặc biệt hữu ích để sử dụng với các hộp kiểm và nút, vì nó có nghĩa là bạn có thể kiểm tra hộp bằng cách nhấp vào văn bản được liên kết thay vì phải tự nhấn hộp.

Đọc thêm về yếu tố này trong MDN .


106
Lưu ý rằng thuộc tính for bị ràng buộc với đầu vào bởi thuộc tính id và thuộc tính name không phải khớp. <nhãn for = "theinput"> Nhập vào đây: </ nhãn> <input type = 'text' name = 'notmatching' id = 'theinput'> Vẫn sẽ hoạt động
Glo

4
Một nhấp chuột trên nhãn không phải lúc nào cũng được xử lý chính xác như nhấp vào yếu tố liên quan. Ví dụ, trong Chrome và Safari, nhấp vào nhãn được liên kết với selectchỉ tập trung vào lựa chọn thay vì mở rộng các tùy chọn.
Pile Emile 8/2/2016

2
@EmilePels Theo như mô hình sự kiện của trình duyệt có liên quan, chúng tương đương nhau. Những gì bạn mô tả là về giao diện người dùng được cung cấp bởi việc xử lý các menu thả xuống của HĐH, được gắn với chính con chuột.
Barmar

3
Điều quan trọng cần đề cập là nó rất phù hợp với khả năng truy cập và trình đọc màn hình, tại sao lại chủ động sử dụng nó.
coyotte508

1
Tôi đã vật lộn trong hai giờ qua với tiếng click của cơ thể được nâng lên hai lần mỗi lần tôi nhấp vào nhãn ở dạng có thuộc tính "for" cho trường nhập. Cuối cùng tôi cũng hiểu tại sao ngay cả khi tôi sử dụng stopPropagation khi nhấp vào nhãn tại sao nhấp chuột của cơ thể vẫn được nâng lên ... vì nhấp chuột được nâng lên bởi trường đầu vào theo hành vi mà bạn mô tả.
Samuel

53

Các forthuộc tính liên kết nhãn với một yếu tố kiểm soát, như đã định nghĩa trong mô tả của labeltrong HTML 4,01 spec. Điều này ngụ ý, trong số những thứ khác, khi labelphần tử nhận được tiêu điểm (ví dụ: bằng cách nhấp vào), nó sẽ chuyển trọng tâm vào điều khiển liên quan của nó. Sự kết hợp giữa nhãn và điều khiển cũng có thể được sử dụng bởi các tác nhân người dùng dựa trên giọng nói, điều này có thể cung cấp cho người dùng cách hỏi nhãn liên quan là gì khi xử lý điều khiển. (Sự liên kết có thể không rõ ràng như trong kết xuất trực quan.)

Trong ví dụ đầu tiên trong câu hỏi (không có for), việc sử dụng labelđánh dấu không có ý nghĩa logic hoặc chức năng - nó vô dụng, trừ khi bạn làm gì đó với CSS hoặc JavaScript.

Thông số kỹ thuật HTML không bắt buộc phải liên kết nhãn với các điều khiển, nhưng Nguyên tắc truy cập nội dung web (WCAG) 2.0 thì có. Điều này được mô tả trong tài liệu kỹ thuật H44: Sử dụng các yếu tố nhãn để liên kết nhãn văn bản với điều khiển biểu mẫu , điều này cũng giải thích rằng liên kết ngầm (bằng cách lồng inputvào bên trong label) không được hỗ trợ rộng rãi như liên kết rõ ràng thông qua foridthuộc tính,


10
+1 để nói về mối quan hệ ngữ nghĩa và ý nghĩa của nó ngoài mối quan hệ nhấp chuột chức năng.
ulty4life

Xin chào, tôi có hai phần tử có cùng id nhưng trong div khác nhau, tôi đã thêm sự kiện tiêu điểm bằng cách sử dụng nhãn cho nhưng trong phần tử thứ hai, nó đang tập trung vào phần tử đầu tiên. <html> <body> <div id = "first_div"> <nhãn for = "name"> Tên </ nhãn> <input type = "text" id = "name"> </ div> <div id = "second_div "> <nhãn for =" name "> Tên </ nhãn> <input type =" text "id =" name "> </ div> </ body> </ html>
LoveToCode

14

Tóm lại, những gì nó làm liên quan đến idđầu vào, đó là tất cả:

<label for="the-id-of-the-input">Input here:</label>
<input type="text" name="the-name-of-input" id="the-id-of-the-input">

6
Thêm một cho là quan trọng, ngay cả khi chúng liền kề. Tôi dường như nhớ lại rằng một số trình đọc màn hình cho người khiếm thị có vấn đề khác. Vì vậy, nếu bạn muốn thân thiện với những người có lẽ đang sử dụng trình duyệt / trình đọc màn hình thay thế, hãy sử dụng phương pháp này.
bean5

3

Thuộc tính for của <label>thẻ phải bằng thuộc tính id của phần tử liên quan để liên kết chúng lại với nhau.


7
Vâng, nhưng ý bạn là gì khi "liên kết chúng lại với nhau"? Họ đã là hàng xóm trong cấu trúc HTML. Đây là những gì tôi không hiểu.
jeff

1
FOR Chỉ định phần tử hình thức nào mà nhãn bị ràng buộc
Rahul Tripathi

2
@CengizFrostclaw jsfiddle.net/DmSGh --- thử nhấp vào cả hai văn bản "Nhập vào đây" và xem điều gì sẽ xảy ra.
JJJ

1
@CengizFrostclaw: - Một nhãn có thể được liên kết với một phần tử bằng cách sử dụng thuộc tính "for"
Rahul Tripathi

1
Có một số tính năng hay, ví dụ như khi bạn đang sử dụng các nút radio. Nhấp vào nhãn thực sự sẽ chuyển nút radio. Đây là một tính năng hay khi bạn cố gắng sử dụng các nút radio với một ui tùy chỉnh.
Alex

0

Thuộc tính for cho thấy nhãn này là viết tắt của trường đầu vào có liên quan hoặc hộp kiểm hoặc nút radio hoặc bất kỳ trường nhập dữ liệu nào khác được liên kết với nó. ví dụ

    <li>
<label>{translate:blindcopy}</label>
            <a class="" href="#" title="{translate:savetemplate}" onclick="" ><i class="fa fa-list" class="button" ></i></a> &nbsp 
            <input type="text" id="BlindCopy" name="BlindCopy" class="splitblindcopy" />
    </li>

0

Nó nhãn bất cứ điều gì đầu vào là tham số cho forthuộc tính.

<input id='myInput' type='radio'>
<label for='myInput'>My 1st Radio Label</label>
<br>
<input id='input2' type='radio'>
<label for='input2'>My 2nd Radio Label</label>
<br>
<input id='input3' type='radio'>
<label for='input3'>My 3rd Radio Label</label>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.