DowYuu言
當一個群組中有很多checkbox時,有時會搭配一個有全選功能的checkbox
讓使用者可以不用點到手痠,增加使用者體驗。
如果群組中的checkbox全部都被選取了,那全選就會自動勾起,沒問題。
如果群組中的checkbox全部都沒有被選取,那全選就會自動取消勾起,沒問題。
如果群組中的checkbox只有部分被選取,那全選就…嗯?To checked or not to checked?
瀏覽器支援 Browser compatibility
支援表在此,IE6+,可以舒服使用。
indeterminate狀態(不明確狀態)基本使用
先提一下checkbox
的indeterminate
(不明確)狀態沒辦法用HTML
屬性設置(HTML
中沒有這個屬性),僅能靠JavaScript
去設置。
HTML:
1 |
|
JavaScript:
1 |
|
只要點擊indeterminate
狀態的checkbox
後,會自動取消indeterminate
狀態(取得indeterminate
值會取得false
),恢復到一般的checkbox
勾選或不勾選的狀態,使用者怎麼點都無法回到indeterminate
狀態。
要知道,indeterminate
狀態和checked
狀態是獨立的兩種狀態,你可以在indeterminate
狀態下同時是勾選的,或是在indeterminate
狀態下不是勾選的,長的還都一個樣,就是一個不明確狀態的樣式蓋在checkbox
上的感覺。
這意味indeterminate
狀態僅僅是視覺上的不同而已,目的在於優化使用者在前端的交互,且表單送出時也只會依據checked
狀態送出,完全不管indeterminate
狀態與否喔。
CSS偽類 :indeterminate
:indeterminate
代表不確定的表單元件,不同表單元件會在不同情況下觸發該偽類,並不是所有表單元件用js
設置indeterminate
狀態為true
就會套用到:indeterminate
(只有checkbox
是如此),使用時要注意IE的兼容性。
元件 | 長相 | 情況 |
---|---|---|
checkbox | indeterminate 狀態被JavaScript 設置為true |
|
radio | 在相同name 中的所有radio 都沒有選取 |
|
progress | 處於不確定狀態(未設置value) |
表單元件本身沒辦法使用太多CSS屬性,但可以還是運用CSS選擇器做出不同變化,radio
的應用可見下方。
HTML:
1 |
|
CSS:
1 |
|
radio元件應用
radio設置indeterminate狀態沒什麼用
radio
元件在用JavaScript
設置了indeterminate
狀態後,在外觀上並沒有區別,但與checkbox
不同,有選取後indeterminate
值不會自動變為false
,有設就一直為true
,沒設就一直為false
,indeterminate
狀態對radio
來說似乎沒什麼使用必要,radio
比較有用的運用是配合偽類 :indeterminate
(詳見下方)。
radio推薦應用-偽類:indeterminate
上面有提到的CSS偽類:indeterminate
會在相同name
中的所有radio
都沒有選取的狀況下被套用,自己覺得radio
比較能實際應用在這部分,但請注意IE不支援。
HTML:
1 |
|
CSS:
1 |
|
checkbox全選功能應用
前面有說到indeterminate
狀態僅僅是視覺上的不同而已,目的在於優化使用者在前端的交互,也有提到像是全選功能中,若你只有勾選其中幾個選項,那顆全選checkbox
在一般情況下無論勾選與不勾選意義上都不是那麼到位,這裡就可以用indeterminate
狀態來解決這個情況。
HTML:
1 |
|
jQuery:
1 |
|
完畢灑花!