2012-05-18 35 views
30

Sự khác biệt giữa hai tập quán dưới đây là gì?checked = "checked" vs checked = true

document.getElementById('myRadio').checked = "checked"; 

document.getElementById('myRadio').checked = true; 

Đối với tôi, cả hai đều hành xử theo cùng một cách. Nhưng, tôi chỉ tò mò muốn biết tại sao có tồn tại hai phương pháp để làm như vậy.

Loại nào sẽ là mục đích sử dụng lý tưởng? Tôi cần hỗ trợ IE7 và các phiên bản cao hơn.

Trả lời

40

document.getElementById('myRadio').checked là một giá trị boolean. Cần phải là true hoặc false

document.getElementById('myRadio').checked = "checked"; chuyển chuỗi đó thành giá trị logic, đúng.

document.getElementById('myRadio').checked = true; chỉ cần gán true mà không truyền.

Sử dụng true vì nó hiệu quả hơn và tiết lộ nhiều hơn cho người bảo trì.

7

Thuộc tính checked ban đầu (HTML 4 và trước đó) không yêu cầu giá trị trên đó - nếu nó tồn tại, phần tử được "kiểm tra", nếu không, thì không.

này, tuy nhiên không hợp lệ cho XHTML rằng sau HTML 4.

Các tiêu chuẩn được đề nghị sử dụng checked="checked" như một điều kiện cho sự thật - vì vậy cả hai cách bạn được đăng kết thúc làm điều tương tự.

Nó thực sự không quan trọng mà bạn sử dụng - sử dụng một trong đó có ý nghĩa nhất đối với bạn và dính vào nó (hoặc đồng ý với nhóm của bạn theo cách nào để đi).

+5

No. Trong HTML 4 và trước đó * đã * yêu cầu giá trị… đó là tên không bắt buộc. nghĩa là 'checked =" checked "' là phiên bản đầy đủ, nhưng bạn có thể để 'checked =" 'và' "' tắt và chỉ để lại giá trị đằng sau. (SGML có thể nhận được * lạ *!) – Quentin

+3

Điều đó nói rằng, câu hỏi đặt ra là hỏi về thuộc tính DOM, không phải là các quy tắc HTML. – Quentin

+0

@Quentin - Đủ công bằng, mặc dù đó gần như là một cuộc tranh luận về ngữ nghĩa. – Oded

2

checked thuộc tính là giá trị boolean để "checked" giá trị khác "string" ngoại trừ boolean false chuyển đổi thành true.

Bất kỳ giá trị chuỗi nào đều đúng. Sự hiện diện của thuộc tính cũng làm cho nó trở thành sự thật:

<input type="checkbox" checked> 

Bạn có thể làm cho nó uncheked chỉ làm thay đổi boolean trong DOM bằng JS.

Vì vậy, câu trả lời là: chúng bằng nhau.

w3c

+2

Bạn đang nhầm lẫn thuộc tính JavaScript DOM với thuộc tính HTML (và ẩn trong khôi phục lỗi trình duyệt để có biện pháp tốt). – Quentin

6

document.getElementById('myRadio') trả về phần tử DOM, tôi sẽ tham chiếu nó là elem trong câu trả lời này.

elem.checked truy cập thuộc tính có tên checked của phần tử DOM. Thuộc tính này luôn là một boolean.

Khi viết HTML, bạn sử dụng checked="checked" trong XHTML; trong HTML, bạn chỉ cần sử dụng checked. Khi thiết lập thuộc tính (điều này được thực hiện thông qua .setAttribute('checked', 'checked')), bạn cần cung cấp một giá trị vì một số trình duyệt xem xét một giá trị rỗng không tồn tại.

Tuy nhiên, vì bạn có phần tử DOM, bạn không có lý do để đặt thuộc tính vì bạn chỉ có thể sử dụng thuộc tính boolean - thoải mái hơn nhiều cho nó. Vì các chuỗi không trống được coi là true trong ngữ cảnh boolean, hãy đặt elem.checked thành 'checked' hoặc bất kỳ thứ gì khác không phải là giá trị giả (thậm chí 'false' hoặc '0') sẽ chọn hộp kiểm. Không có lý do để không sử dụng truefalse mặc dù vậy bạn nên gắn bó với các giá trị thích hợp.

5

Phần tử có cả thuộc tính và thuộc tính có tên checked. Thuộc tính xác định trạng thái hiện tại.

Thuộc tính là một chuỗi và thuộc tính là một boolean. Khi phần tử được tạo từ mã HTML, thuộc tính được đặt từ đánh dấu và thuộc tính được đặt tùy thuộc vào giá trị của thuộc tính.

Nếu không có giá trị cho các thuộc tính trong đánh dấu, các thuộc tính trở nên null, nhưng bất động sản luôn luôn là một trong hai true hoặc false, vì vậy nó trở thành false.

Khi bạn thiết lập thuộc tính, bạn nên sử dụng một giá trị boolean:

document.getElementById('myRadio').checked = true; 

Nếu bạn đặt thuộc tính, bạn sử dụng một chuỗi:

document.getElementById('myRadio').setAttribute('checked', 'checked'); 

Lưu ý rằng thiết lập các thuộc tính cũng thay đổi thuộc tính, nhưng thiết lập thuộc tính không thay đổi thuộc tính.

Cũng lưu ý rằng bất kỳ giá trị nào bạn đặt thuộc tính, thuộc tính sẽ trở thành true. Ngay cả khi bạn sử dụng một chuỗi rỗng hoặc null, việc đặt thuộc tính có nghĩa là nó được chọn. Sử dụng removeAttribute để bỏ chọn phần tử bằng thuộc tính:

document.getElementById('myRadio').removeAttribute('checked'); 
+0

Giải thích tốt giữa thuộc tính & thuộc tính. Cảm ơn! – Mac

Các vấn đề liên quan