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 | |
完畢灑花!