Web前端技术 · 第4课7 / 21 | 编码:L04-09a
使用HTML创建表单

多选项目:一组字段可以有多个值

checkbox是复选框。显示给人的文字,与提交给系统的值,可以不同。

<fieldset>
  <legend>体验项目(可多选)</legend>
  <label><input type="checkbox" name="interest"
                value="singing" checked> 唱腔体验</label>
  <label><input type="checkbox" name="interest"
                value="costume"> 服饰赏析</label>
</fieldset>

思考

两项都选中时,会提交两个不同字段名吗?第二项未选中时,是否会提交 interest=false?

展开参考分析

两项都选中时,是同名的两条记录:interest=singing 和 interest=costume。未选中的复选框通常不产生记录,不自动提交false。服务端需要按多值字段接收。

1. checked:页面刚打开时,是否默认选中?

上例“唱腔体验”写了 checked,所以默认选中;“服饰赏析”没有写,所以默认不选中。用户仍可点击改变选择。

<label><input type="checkbox" checked> 默认选中</label>
<label><input type="checkbox"> 默认不选中</label>

checked 是布尔属性,只看“有没有这个属性”,不看后面写什么。即使写 checked="false",浏览器仍会默认选中。想默认不选中,应删除整个 checked 属性,而不是把它的值改成 false。

2. value:选中后,提交什么内容?

上例中 value="singing" 表示提交给系统的值;“唱腔体验”是显示给用户的文字,两者不是一回事。

控件写法与选择状态提交的数据
有 name="interest" 和 value="singing",且已勾选interest=singing
同一个控件,没有勾选不提交这一项,不会自动提交 false。
保留 name="interest",去掉 value,且已勾选interest=on,不是“唱腔体验”。

checked 管默认状态,value 管提交内容。提交时看的是用户当前有没有勾选,而不只是源码中有没有 checked。