Baseline Widely available
checkbox
ç±»åç <input>
å
ç´ å¨é»è®¤æ
åµä¸è¢«åç°ä¸ºæ¿æ´»æ¶è¢«éä¸ï¼æå¾ï¼çæ¹æ¡ï¼å°±åä½ å¨å®æ¹çæ¿åºæä»¶è¡¨æ ¼ä¸çå°ç飿 ·ãå
·ä½å¤è§åå³äºæµè§å¨è¿è¡çæä½ç³»ç»é
ç½®ãä¸è¬æ¥è¯´ï¼è¿æ¯ä¸ä¸ªæ£æ¹å½¢ï¼ä½å®å¯è½æåè§ãå¤éæ¡å
è®¸ä½ å¨è¡¨æ ¼ä¸éæ©åä¸çæ°å¼è¿è¡æäº¤ï¼æä¸æäº¤ï¼ã
<fieldset>
<legend>Choose your monster's features:</legend>
<div>
<input type="checkbox" id="scales" name="scales" checked />
<label for="scales">Scales</label>
</div>
<div>
<input type="checkbox" id="horns" name="horns" />
<label for="horns">Horns</label>
</div>
</fieldset>
p,
label {
font:
1rem "Fira Sans",
sans-serif;
}
input {
margin: 0.4rem;
}
夿³¨ï¼ åéæé®ä¸å¤éæ¡ç±»ä¼¼ï¼ä½æä¸ä¸ªéè¦çåºå«ââåéæé®è¢«åç»ä¸ºä¸ä¸ªéåï¼ä¸æ¬¡åªè½éæ©ä¸ä¸ªåéæé®ï¼èå¤éæ¡å è®¸ä½ éä¸/åæ¶éä¸å个å¼ã妿åå¨å¤ä¸ªæ§ä»¶ï¼åéæé®å 许ä»å®ä»¬ä¸éæ©ä¸ä¸ªï¼èå¤éæ¡åå è®¸éæ©å¤ä¸ªå¼ã
å¼ä¸ä¸ªå符串ï¼ä»£è¡¨å¤éæ¡çå¼ãå¨å®¢æ·ç«¯ä¸æ¾ç¤ºï¼ä½å¨æå¡å¨ä¸å¯¹åºäºç»äºè¯¥å¤éæ¡ç name
ç value
å¼ã以ä¸é¢çä¾å为ä¾ï¼
<form>
<div>
<input
type="checkbox"
id="subscribeNews"
name="subscribe"
value="newsletter" />
<label for="subscribeNews">è¦è®¢é
æ¥çº¸åï¼</label>
</div>
<div>
<button type="submit">订é
</button>
</div>
</form>
å¨è¿ä¸ªä¾åä¸ï¼æä»¬ç subscribe
ä¸å
·æçå¼ä¸º newsletter
ãå½è¡¨å被æäº¤æ¶ï¼æ°æ®çé®å¼å¯¹å°æ¯ subscribe=newsletter
ã
妿å¤éæ¡ç value
屿§è¢«çç¥äºï¼åå®é»è®¤å
·æå¼ on
ï¼å¨è¿ç§æ
åµä¸æäº¤çæ°æ®å°æ¯ subscribe=on
ã
夿³¨ï¼ 妿ä¸ä¸ªå¤éæ¡å¨å
¶è¡¨å被æäº¤æ¶æ²¡æè¢«éä¸ï¼å°±ä¸ä¼æä»»ä½ä»£è¡¨å
¶æªè¢«éä¸çç¶æï¼ä¾å¦ value=unchecked
ï¼çå¼è¢«æäº¤ç»æå¡å¨ââè¯¥å¼æ ¹æ¬å°±æ²¡æè¢«æäº¤ç»æå¡å¨ï¼å¦æä½ æ³å¨å¤éæ¡æªè¢«é䏿¶æäº¤ä¸ä¸ªé»è®¤å¼ï¼ä½ å¯ä»¥å¨è¡¨åä¸å å
¥ä¸ä¸ªå
·æç¸åç name
å value
ç <input type="hidden"> åæ®µï¼å®å¯ä»¥ç± JavaScript çæã
é¤äº <input>
å
ç´ å
±æç屿§å¤ï¼checkbox
è¿æ¯æä»¥ä¸å±æ§ï¼
checked
ä¸ä¸ªå¸å°å±æ§ï¼è¡¨ç¤ºè¯¥å¤éæ¡æ¯å¦è¢«é»è®¤éä¸ï¼å½é¡µé¢å è½½æ¶ï¼ãå®ä¸è¡¨ç¤ºè¿ä¸ªå¤éæ¡å½åæ¯å¦è¢«éä¸ï¼å¦æå¤éæ¡çç¶æè¢«æ¹åï¼è¿ä¸ªå
容屿§ä¸åæ è¿ä¸ªååãæ¤æ¶ï¼åªæ HTMLInputElement
ç IDL 屿§ checked
伿´æ°ã
夿³¨ï¼ ä¸å
¶ä»è¾å
¥æ§ä»¶ä¸åï¼å¤éæ¡çå¼åªæå¨å¤éæ¡å½åç¶æä¸º checked
æ¶æä¼è¢«å
å«å¨æäº¤çæ°æ®ä¸ã妿å®è¢«éä¸ï¼é£ä¹å¤éæ¡ç value
屿§çå¼å°±ä¼è¢«æ¥å为è¾å
¥çå¼ãä¸åå
¶ä»æµè§å¨é£æ ·ï¼Firefox é»è®¤æ
åµä¸å¨ä¸å页é¢ä¹é´ä¼ä¿æ <input>
卿éä¸çç¶æãè¯·ä½¿ç¨ autocomplete
屿§æ¥æ§å¶è¿ä¸ªç¹æ§ã
value
ææç <input>
å
ç´ é½æ value
屿§ï¼ä½æ¯ï¼å®å¯¹ checkbox
ç±»åçè¾å
¥æç¹æ®ä½ç¨ï¼å½è¡¨å被æäº¤æ¶ï¼åªæå½å被éä¸çå¤éæ¡ä¼è¢«æäº¤ç»æå¡å¨ï¼æ¥åçå¼å°±æ¯ value
屿§çå¼ãå¦ææ²¡ææå® value
ï¼é»è®¤ä¸ºå符串 on
ãè¿å¨ä¸é¢çå¼é¨åæéè¿°ã
æä»¬å·²ç»ä»ç»äºå¤éæ¡çæåºæ¬ç¨éãç°å¨è®©æä»¬ççéè¦ææ¡çå ¶ä»ä¸å¤éæ¡æå ³ç常è§åè½åææ¯ã
å¤çå¤ä¸ªå¤éæ¡æä»¬å¨ä¸é¢çå°çä¾ååªå å«ä¸ä¸ªå¤éæ¡ï¼å¨ç°å®ä¸çä¸ï¼ä½ å¯è½ä¼éå°å¤ä¸ªå¤éæ¡ã妿å®ä»¬å®å ¨ä¸ç¸å ³ï¼é£ä¹ä½ å¯ä»¥å¦ä¸æç¤ºï¼åå«å¤çå®ä»¬ã使¯ï¼å¦æå®ä»¬é½æ¯ç¸å ³çï¼äºæ 就没é£ä¹å®¹æäºã
ä¾å¦ï¼å¨ä¸é¢çæ¼ç¤ºä¸ï¼æä»¬å æ¬å¤ä¸ªå¤éæ¡ï¼è®©ç¨æ·éæ©ä»ä»¬çå ´è¶£ï¼è§ç¤ºä¾é¨åç宿´çæ¬ï¼ã
<fieldset>
<legend>éæ©ä½ çå
´è¶£</legend>
<div>
<input type="checkbox" id="coding" name="interest" value="coding" />
<label for="coding">ç¼ç </label>
</div>
<div>
<input type="checkbox" id="music" name="interest" value="music" />
<label for="music">é³ä¹</label>
</div>
</fieldset>
å¨è¿ä¸ªä¾åä¸ï¼ä½ ä¼çå°æä»¬ç»æ¯ä¸ªå¤éæ¡èµäºäºç¸åç name
ãå¦æä¸¤ä¸ªå¤éæ¡é½è¢«éä¸ï¼ç¶åæäº¤è¡¨åï¼ä½ ä¼å¾å°è¿æ ·ä¸ä¸²é®/å¼å¯¹ï¼interest=coding&interest=music
ãå½è¿ä¸ªå符串å°è¾¾æå¡å¨æ¶ï¼ä½ éè¦æå®è§£ææä¸ä¸ªå
³èæ°ç»ä»¥å¤çä¸è¥¿ï¼interest
çææå¼é½éè¦è¢«æè·ãæå
³ Python 使ç¨çä¸ç§ææ¯ï¼åè§ç¨ä¸ä¸ªæå¡å¨ç«¯åéå¤çå¤ä¸ªå¤éæ¡ã
为äºè®©å¤éæ¡é»è®¤ä¸ºéä¸ç¶æï¼éè¦ç»å®èµäº checked
屿§ãè§å¦ä¸ä¾åï¼
<fieldset>
<legend>éæ©ä½ çå
´è¶£</legend>
<div>
<input type="checkbox" id="coding" name="interest" value="coding" checked />
<label for="coding">ç¼ç </label>
</div>
<div>
<input type="checkbox" id="music" name="interest" value="music" />
<label for="music">é³ä¹</label>
</div>
</fieldset>
为å¤éæ¡æä¾ç¨å¤§çç¹å»åºå
å¨ä¸é¢çä¾åä¸ï¼ä½ å¯è½å·²ç»æ³¨æå°ï¼ä½ å¯ä»¥éè¿ç¹å»å¤éæ¡ç¸å
³ç <label>
å
ç´ ä»¥åå¤éæ¡æ¬èº«æ¥åæ¢å¤éæ¡çç¶æãè¿æ¯ HTML è¡¨åæ ç¾çä¸ä¸ªé常æç¨çåè½ï¼ä½¿ä½ æ´å®¹æç¹å»ä½ æ³è¦çé项ï¼ç¹å«æ¯å¨æºè½ææºçå°å±å¹è®¾å¤ä¸ã
é¤äºæ éç¢ä¹å¤ï¼è¿ä¹æ¯å¨è¡¨å䏿£ç¡®è®¾ç½® <label>
å
ç´ çå¦å¤ä¸ä¸ªçç±ã
é¤äºéä¸åæªéä¸çç¶æå¤ï¼å¤éæ¡è¿æç¬¬ä¸ç§ç¶æï¼ä¸ç¡®å®ãè¿æ¯ä¸ç§æ æ³è¯´æ¸
该é项æ¯è¢«æå¼è¿æ¯å
³éçç¶æãè¿æ¯éè¿ JavaScript 设置ç HTMLInputElement
对象ç indeterminate
屿§ï¼å®ä¸è½ç¨ HTML 屿§è®¾ç½®ï¼ã
inputInstance.indeterminate = true;
å¨å¤§å¤æ°æµè§å¨ä¸ï¼å¤äºä¸ç¡®å®ç¶æçå¤éæ¡å¨æ¡ä¸æä¸æ¡æ¨ªçº¿ï¼çèµ·æ¥æç¹åè¿å符æåå·ï¼ï¼è䏿¯ä¸ä¸ªå¯¹å¾ã
è¿ä¸ªå±æ§çä½¿ç¨æ åµä¸å¤ãæå¸¸è§çæ¯å½ä¸ä¸ªå¤éæ¡âæ¥æâä¸äºåé项ï¼ä¹æ¯å¤éæ¡ï¼çæ¶åã妿ææçåé项é½è¢«éä¸ï¼æ¥æçå¤éæ¡ä¹è¢«éä¸ï¼å¦æå®ä»¬é½æ²¡æè¢«éä¸ï¼æ¥æçå¤éæ¡å°±æ²¡æè¢«éä¸ã妿任ä½ä¸ä¸ªæå¤ä¸ªåé项çç¶æä¸å ¶ä»é项ä¸åï¼æ¥æçå¤éæ¡å°±å¤äºä¸ç¡®å®çç¶æã
è¿å¯ä»¥å¨ä¸é¢çä¾åä¸çå°ï¼æè°¢ CSS Tricks æä¾ççµæï¼ãå¨è¿ä¸ªä¾åä¸ï¼æä»¬è®°å½äºä¸ºä¸ä¸ªé æ¹æ¶éçåæãå½ä½ å¾éæä¸å¾éä¸ä¸ªåæçå¤éæ¡æ¶ï¼ä¸ä¸ª JavaScript 彿°ä¼æ£æ¥å¾éçåææ»æ°ï¼
indeterminate
ï¼ä¸é´ï¼ç¶æãchecked
ï¼å·²éä¸ï¼ç¶æãå¨è¿ç§æ
åµä¸ï¼indeterminate
ç¶æç¨æ¥è¯´æå·²ç»å¼å§æ¶éåæï¼ä½é
æ¹è¿æ²¡æå®æã
const overall = document.querySelector("#enchantment");
const ingredients = document.querySelectorAll("ul input");
overall.addEventListener("click", (e) => {
e.preventDefault();
});
for (const ingredient of ingredients) {
ingredient.addEventListener("click", updateDisplay);
}
function updateDisplay() {
let checkedCount = 0;
for (const ingredient of ingredients) {
if (ingredient.checked) {
checkedCount++;
}
}
if (checkedCount === 0) {
overall.checked = false;
overall.indeterminate = false;
} else if (checkedCount === ingredients.length) {
overall.checked = true;
overall.indeterminate = false;
} else {
overall.checked = false;
overall.indeterminate = true;
}
}
夿³¨ï¼ å¦æä½ æäº¤ä¸ä¸ªå¸¦æä¸ç¡®å®å¤éæ¡ç表åï¼åççæ åµä¸å¤éæ¡ä¸è¢«éä¸çæ åµç¸åââæ²¡æä»£è¡¨å¤éæ¡çæ°æ®æäº¤ç»æå¡å¨ã
éªè¯æ¹å¼å¤éæ¡æ¯ææä¾ç»ææ <input>
å
ç´ çéªè¯åè½ãç¶èï¼å¤§é¨åç ValidityState
å¼å°æ°¸è¿ä¸º false
ã妿å¤éæ¡å
·æ required
屿§ï¼ä½æ²¡æè¢«éä¸ï¼é£ä¹ ValidityState.valueMissing
å°ä¸º true
ã
ä¸é¢çä¾åæ¯æä»¬å¨ä¸é¢çå°çâå¤ä¸ªå¤éæ¡âä¾åçæ©å±çæ¬ââ宿æ´å¤çæ åé项ï¼è¿æä¸ä¸ªâå ¶ä»âå¤éæ¡ï¼å½è¢«é䏿¶ï¼ä¼åºç°ä¸ä¸ªææ¬å段æ¥è¾å ¥âå ¶ä»âé项çå¼ãè¿æ¯ç¨ä¸äºç®åç JavaScript 代ç å®ç°çãè¿ä¸ªä¾åè¿å æ¬ä¸äº CSS æ¥æ¹åæ ·å¼ã
HTML<form>
<fieldset>
<legend>éæ©ä½ çå
´è¶£</legend>
<div>
<input type="checkbox" id="coding" name="interest" value="coding" />
<label for="coding">ç¼ç </label>
</div>
<div>
<input type="checkbox" id="music" name="interest" value="music" />
<label for="music">é³ä¹</label>
</div>
<div>
<input type="checkbox" id="art" name="interest" value="art" />
<label for="art">èºæ¯</label>
</div>
<div>
<input type="checkbox" id="sports" name="interest" value="sports" />
<label for="sports">ä½è²</label>
</div>
<div>
<input type="checkbox" id="cooking" name="interest" value="cooking" />
<label for="cooking">ç¹é¥ª</label>
</div>
<div>
<input type="checkbox" id="other" name="interest" value="other" />
<label for="other">å
¶ä»</label>
<input type="text" id="otherValue" name="other" />
</div>
<div>
<button type="submit">æäº¤è¡¨å</button>
</div>
</fieldset>
</form>
CSS
html {
font-family: sans-serif;
}
form {
width: 600px;
margin: 0 auto;
}
div {
margin-bottom: 10px;
}
fieldset {
background: cyan;
border: 5px solid blue;
}
legend {
padding: 10px;
background: blue;
color: cyan;
}
JavaScript
const otherCheckbox = document.querySelector("#other");
const otherText = document.querySelector("#otherValue");
otherText.style.visibility = "hidden";
otherCheckbox.addEventListener("change", () => {
if (otherCheckbox.checked) {
otherText.style.visibility = "visible";
otherText.value = "";
} else {
otherText.style.visibility = "hidden";
}
});
è§è æµè§å¨å
¼å®¹æ§ åè§
<input>
å
ç´ åç¨äºæä½è¯¥å
ç´ çæ¥å£ HTMLInputElement
:checked
å :indeterminate
CSS éæ©å¨ï¼å¯ä¾èµäºæ ·å¼RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4