Làm thế nào để tạo một hộp kiểm với nhãn có thể nhấp?


Câu trả lời:


1915

Cách 1: Bọc nhãn thẻ

Gói hộp kiểm trong labelthẻ:

<label><input type="checkbox" name="checkbox" value="value">Text</label>

Phương pháp 2: Sử dụng forthuộc tính

Sử dụng forthuộc tính (khớp với hộp kiểm id):

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id">Text</label>

LƯU Ý : ID phải là duy nhất trên trang!

Giải trình

Vì các câu trả lời khác không đề cập đến nó, một nhãn có thể bao gồm tối đa 1 đầu vào và bỏ qua forthuộc tính và nó sẽ được giả định rằng nó dành cho đầu vào bên trong nó.

Trích từ w3.org (với sự nhấn mạnh của tôi):

[Thuộc tính for] liên kết rõ ràng nhãn được xác định với điều khiển khác. Khi có mặt, giá trị của thuộc tính này phải giống với giá trị của thuộc tính id của một số điều khiển khác trong cùng một tài liệu. Khi vắng mặt, nhãn được xác định được liên kết với nội dung của phần tử.

Để liên kết nhãn với điều khiển khác một cách ngầm định, phần tử điều khiển phải nằm trong nội dung của phần tử LABEL . Trong trường hợp này, LABEL chỉ có thể chứa một yếu tố kiểm soát. Nhãn có thể được định vị trước hoặc sau điều khiển liên quan.

Sử dụng phương pháp này có một số lợi thế hơn for:

  • Không cần chỉ định một idcho mỗi hộp kiểm (tuyệt vời!).

  • Không cần sử dụng thuộc tính phụ trong <label>.

  • Vùng có thể nhấp của đầu vào cũng là vùng có thể nhấp của nhãn, do đó, không có hai vị trí riêng biệt để nhấp có thể kiểm soát hộp kiểm - chỉ có một, bất kể <input>văn bản nhãn thực tế và cách nhau bao xa và cho dù bạn thuộc loại CSS nào áp dụng cho nó.

Bản demo với một số CSS:

label {
 border:1px solid #ccc;
 padding:10px;
 margin:0 0 10px;
 display:block; 
}

label:hover {
 background:#eee;
 cursor:pointer;
}
<label><input type="checkbox" />Option 1</label>
<label><input type="checkbox" />Option 2</label>
<label><input type="checkbox" />Option 3</label>


14
Yêu nó, nhưng xin vui lòng chỉnh sửa lại. Điều này chỉ tốt cho các hộp kiểm tra. Chúng ta không khuyến khích mọi người bọc các đầu vào khác của họ bằng nhãn, vì điều đó phá vỡ hệ thống lưới và khả năng đáp ứng di động sẽ khó đến hơn
Tối đa

1
Nếu ai đó có thể giải thích bình luận @John để lại xin vui lòng, bởi vì nó không có ý nghĩa gì với tôi.
Wesley Murch

16
@ John đó là một hướng dẫn đánh dấu dành riêng cho bootstrap. Nếu bạn không sử dụng khung hoặc đang sử dụng khung khác, nó sẽ hoàn toàn ổn. Cảm ơn vi đa trả lơi.
Wesley Murch

3
@John. Trên trang bạn liên kết, ví dụ bootstrap tất cả các hộp kiểm có nhãn, tôi không thấy bất kỳ cảnh báo nào như bạn chỉ ra, có lẽ nó không còn phù hợp với bootstrap mới nhất.
dùng2144406

2
Như tôi đã học ngày hôm nay, không trộn lẫn Phương pháp 1 và Phương pháp 2. Nếu bạn bọc hộp kiểm vào nhãn VÀ bao gồm cho, sau đó nhấp vào nhãn sẽ không kích hoạt hộp kiểm.
BBlake

50

Chỉ cần chắc chắn rằng nhãn được liên kết với đầu vào.

<fieldset>
  <legend>What metasyntactic variables do you like?</legend>

  <input type="checkbox" name="foo" value="bar" id="foo_bar">
  <label for="foo_bar">Bar</label>

  <input type="checkbox" name="foo" value="baz" id="foo_baz">
  <label for="foo_baz">Baz</label>
</fieldset>

1
Tôi bối rối bởi thực tế là bạn đã cho hai hộp kiểm tra cùng tên và các giá trị khác nhau. Đó có phải là mục đích?
LarsH

2
@LarsH - Vâng, đó là cách bạn tạo các nhóm hộp kiểm.
Quentin

Cảm ơn. Tôi đã xem w3.org/wiki/HTML/Elements/input/checkbox và nó không hữu ích trong vấn đề đó.
LarsH

2
Với PHP, bạn có muốn $ _POST ['foo'] luôn có một trong hai giá trị tối đa không? Ngay cả khi cả hai kiểm tra. Nhóm hộp kiểm là gì?
jeromej

2
@JeromeJ: Để php xử lý chính xác, bạn phải thêm dấu ngoặc vuông vào tên, ví dụ : <input type="checkbox" name="foo[]" value="bar" ...>. Điều này sẽ cung cấp cho bạn một mảng chứa các giá trị của tất cả các kiểm tra hộp (có tên này). Ví dụ $_POST['foo'][0]có thể bar$_POST['foo'][1]có thể baz(nếu cả hai được chọn).
Levite

11

Bạn cũng có thể sử dụng các yếu tố giả CSS để chọn và hiển thị nhãn từ tất cả các thuộc tính giá trị của hộp kiểm tra (tương ứng).
Chỉnh sửa: Điều này sẽ chỉ hoạt động với webkit và các trình duyệt dựa trên nhấp nháy (Chrome (ium), Safari, Opera ....) và do đó hầu hết các trình duyệt di động. Không có hỗ trợ Firefox hay IE ở đây.
Điều này chỉ có thể hữu ích khi nhúng webkit / nháy vào ứng dụng của bạn.

<input type="checkbox" value="My checkbox label value" />
<style>
[type=checkbox]:after {
    content: attr(value);
    margin: -3px 15px;
    vertical-align: top;
    white-space:nowrap;
    display: inline-block;
}
</style>

Tất cả các nhãn yếu tố giả sẽ có thể nhấp được.

Bản trình diễn: http://codepen.io/mrmoje/pen/oteLl , + Ý chính của nó


Thật. Tắc kè và Trident và tắc kè dường như không thích điều này. Điều này sẽ chỉ hoạt động với Webkit và Blink. Tôi sẽ cập nhật câu trả lời
mrmoje

3
Bị hạ bệ. Mặc dù có thể nhưng đó là một cách tồi - không hoạt động trên nhiều trình duyệt, không tốt cho khả năng truy cập.
James Billingham

Vấn đề tương thích sang một bên, giải pháp này không phải là ngữ nghĩa như câu trả lời hàng đầu vì không có mối liên hệ trực tiếp nào trong việc đánh dấu giữa <nhãn> và <input>
deadboy

"Nó hoạt động trên Webkit / Blink" có mùi giống như một lỗi sử dụng ( stackoverflow.com/questions/2587669/ ( )) vì vậy nó có thể ngừng hoạt động bất cứ lúc nào.
Xenos

7
<label for="vehicle">Type of Vehicle:</label>
<input type="checkbox" id="vehicle" name="vehicle" value="Bike" />

3
<label for="myInputID">myLabel</label><input type="checkbox" id="myInputID" name="myInputID />

1
Vì nó có thể gây nhầm lẫn cho một số độc giả, bạn nên thay đổi namegiá trị của thuộc tính thành giá trị khác với giá trị có trong foridthuộc tính, vì hai điều này có liên quan, namemặc dù không phải vậy (mặc dù tôi không bắt buộc phải đưa vào) .
Dzhuneyt

3

Nó cũng hoạt động:

<form>
    <label for="male"><input type="checkbox" name="male" id="male" />Male</label><br />
    <label for="female"><input type="checkbox" name="female" id="female" />Female</label>
</form>

Bạn có thể tham gia foridcác thuộc tính trong ví dụ của mình, vì labelthẻ chỉ có một yếu tố đầu vào bên trong nó.
Dzhuneyt

2

Điều này sẽ giúp bạn: W3Schools - Nhãn

<form>
  <label for="male">Male</label>
  <input type="radio" name="sex" id="male" />
  <br />
  <label for="female">Female</label>
  <input type="radio" name="sex" id="female" />
</form>


0

Sử dụng labelphần tử và forthuộc tính để liên kết nó với hộp kiểm:

<label for="myCheckbox">Some checkbox</label> <input type="checkbox" id="myCheckbox" />



-7

Dùng cái này

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id" id="checkbox_lbl">Text</label>


$("#checkbox_lbl").click(function(){ 
    if($("#checkbox_id").is(':checked'))
        $("#checkbox_id").removAttr('checked');
    else
       $("#checkbox_id").attr('checked');
    });
});

9
Không cần thiết phải sử dụng JavaScript để làm điều này. Nó được tích hợp vào HTML.
Lasse Bunk

4
@LasseBunk, nếu chỉ là JavaScript, nhưng toàn bộ thư viện jQuery là bắt buộc để nó hoạt động. Hãy xem liệu ai đó có thể đưa ra giải pháp Angular 2 không.
laurent
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.