使用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。