2012-02-20 51 views
13

Tôi muốn sử dụng thuộc tính không xác định của hộp kiểm. Thay đổi giá trị trong JavaScript hoạt động trong tất cả các loại trình duyệt (thậm chí MSIE6!), Tuy nhiên, tôi không thể đặt giá trị ban đầu thông qua các thuộc tính HTML trong bất kỳ nào.HTML - Tại sao không xác định = "không xác định | đúng" được tôn trọng?

Đây có phải là thiết kế không? Nếu có, tại sao? Về phía máy chủ, tôi có thể xác định rằng nó không xác định. Vậy tại sao tôi không thể nói với trình duyệt? Các nhà cung cấp trình duyệt không lo lắng về các FOUC (Flash của nội dung không có nội dung) nếu một tập lệnh chạy dài giữ cài đặt thuộc tính?

Dưới đây là một ví dụ làm việc: http://jsfiddle.net/KUQC9/1/

+0

Thuộc tính 'không xác định' là gì? –

+0

@Rocket, hãy xem ví dụ làm việc. –

+1

Tôi chỉ đang tìm hiểu về điều này ngay bây giờ. Tôi có một câu hỏi cho bạn, thực sự ... bạn nói rằng bạn có thể xác định rằng nó không xác định trên máy chủ: làm thế nào để bạn làm điều đó? (Nhân tiện, bạn phần lớn có thể tránh các FOUC bằng cách sử dụng sự kiện tải DOM thay vì thời gian chờ - http://jsfiddle.net/Cd35L/ - hoặc thậm chí sớm hơn - http://jsfiddle.net/dV3uL/) –

Trả lời

9

Bạn không thể tạo một không xác định hộp kiểm thông qua HTML bằng cách thiết kế. Xem bài viết này trên css-tricks.com, trong đó thảo luận sâu về chủ đề.

Đối với "tại sao" một phần của câu hỏi của bạn, có một số thông tin về danh sách gửi thư của W3C có thể hữu ích:

  • Có vẻ như ý tưởng cho hộp kiểm một giá trị tri-state (dường như kiểm tra, kiểm soát, không xác định) đã được xem xét, nhưng không được thực hiện vì tương thích ngược vấn đề
  • Việc đề cập đến duy nhất của một sự thật indeterminate HTML "nội dung" thuộc tính, như bạn thấy trong ví dụ của bạn, rằng tôi có thể tìm được ở đây:

đối với những gì nó có giá trị, có thực chất là một CSS selector :indeterminate (có vẻ như được đối xử như CSS pseudo-classes khác như :visited, cũng không thể được đặt thông qua HTML trực tiếp, vì vậy có lẽ đó cũng là một lý do khác indeterminate không thể là một trong hai). Trong bản demo của bộ chọn CSS bản thân W3C sử dụng cùng một phương pháp mà bạn thực hiện: W3C indeterminate CSS selector demo. Trong điều kiện đó, tôi muốn nói rằng bạn đang sử dụng phương pháp tốt nhất có sẵn để đặt trạng thái không xác định của hộp kiểm

+2

Bài viết cũng không phải ý kiến ​​của nó thực sự thảo luận về lý do tại sao. –

+0

@ Olson.dev: Tôi đã thêm một ít thông tin từ danh sách gửi thư của W3C- xem các chỉnh sửa của tôi. Hy vọng rằng đó là một số giá trị cho bạn- chúc may mắn! –

+0

cảm ơn. Tôi thấy các liên kết này hữu ích về "lý do" và đã đánh dấu câu trả lời của bạn được chấp nhận. Ngoài ra +1. –

3

Đó là theo thiết kế. Cách duy nhất để biểu thị trạng thái hộp kiểm HTML là thông qua thuộc tính đã chọn; điều này là do hộp kiểm có nghĩa là true/false, thay vì true/false/unknown. Đánh dấu một cái gì đó không xác định có thể được thực hiện thông qua Javascript, nhưng nó sẽ không thay đổi giá trị thực tế/sumbitted của hộp kiểm.

Nếu bạn thực sự muốn khởi tạo hộp kiểm không xác định, bạn sẽ cần phải làm điều đó với Javascript (tôi sẽ tưởng tượng về sự kiện tải).

+0

Cảm ơn câu trả lời. Tuy nhiên, bạn không cho tôi biết nhiều hơn tôi đã chỉ định trong câu hỏi. Thiết kế của ai? Tại sao lại là cách này? Tôi hiểu nó có nghĩa là đúng/sai nhưng không được biết, đó là lý do tại sao tôi đề xuất 2 thuộc tính riêng biệt (chỉ cách các thuộc tính riêng biệt). Ngoài ra, ví dụ làm việc của tôi đã cho thấy khởi tạo chúng thông qua JavaScript. –

+0

Đây là thiết kế của w3c (http://w3.org), phần thân nhận dạng/mã hóa/thiết kế chính thức HTML. HTML (và XHTML và, cho vấn đề đó, XML) là các ngôn ngữ tài liệu, chứ không phải là các ngôn ngữ lập trình. Nếu mục đích trong tài liệu của hộp kiểm là chỉ định một tùy chọn phải đúng hoặc sai, mục đích nào sẽ có thuộc tính mô tả giá trị đúng/sai đó là phân phối không xác định. – devstruck

+1

Con trai a. . . theo bản phác thảo HTML5 16 tháng 2 năm 2012 của w3c, nó không xác định là một thuộc tính của phần tử đầu vào. http://dev.w3.org/html5/spec/the-input-element.html#dom-input-indeterminate Ban đầu không thể được đặt (thành true). – devstruck

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