姓名需要自由输入,但活动场次通常只能从已提供的选项中选择。先判断允许选几个答案,再决定控件:较长的单选选项列表适合下拉框,彼此独立的多个选择适合复选框,一组互斥选择适合单选框。
select 与 option
select 是选择控件,内部每个 option 表示一个选项。可见文字用于阅读,value 用于提交:
<label for="session">场次</label>
<select id="session" name="session">
<option value="morning">上午阅读</option>
<option value="afternoon">下午交流</option>
</select>选择“下午交流”时,字段 session 的值是 afternoon。默认单选下拉框通常选中第一项;可以给某个 option 加 selected 设置初始选择。selected 是布尔属性,与 required 一样,看是否出现而不是看字符串是不是 true。
checkbox 表示独立开关
input type="checkbox" 创建复选框。每个选项可以单独勾选,也可以取消。关联 label 后,点击文字也能切换勾选。多个复选框可以用相同 name 表示同一类信息,但每个 id 必须唯一,各自的 value 应明确。
选中的复选框会提交 name/value;未选中的复选框通常不提交这个字段。省略 value 时默认值通常是 on,这不利于区分多个选项,因此例子中显式设置 value。checked 设置初始选中状态,删除它才表示取消初始选中。
radio 表示同组互斥
input type="radio" 创建单选框。同一个表单中,具有相同 name 的 radio 组成一组,选中其中一个会取消另一个。组内 id 不同、value 不同,但 name 相同。如果 name 写成两个不同值,两个按钮就可能同时选中。
fieldset 可以把相关控件放成一组;它的 legend 提供整组的可见说明。例如一组名为“参加方式”的 radio,选项是“现场”和“线上”。整组说明与每个选项自己的 label 都需要保留。
在 Lab 中先试下拉框与两个复选框,确认复选框能同时选中。再试正确 radio 分组,并故意改掉一个 name,观察互斥关系消失。恢复之后,只保留一个 checked 作为组的初始选择。不要为了“同组”而复制相同 id。
页面实验:下拉选择、复选框与单选框
先切换对照示例,再按照观察提示修改一处 HTML,比较源码与真实页面。示例中的英文短句可以替换成自己的文字。
两个复选框可以同时勾选;选择文字与实际 value 可以不同。
预览保留浏览器默认的标题、段落和表单外观。示例切换会替换编辑内容;重置实验可恢复初始状态。可点击页内链接、输入文字和选择选项;此练习预览不提交数据、不运行脚本。要在本机尝试,将完整代码保存为 index.html 后用浏览器打开。
知识测验
动手编写:下拉选择、复选框与单选框
新建 index.html,按照下面的要求编写完整页面;保存并用浏览器打开,边操作边检查结果。参考答案是一种实现,文字内容可以不同。
- 制作两场次 select、两个兴趣 checkbox,并给每个选项设置清晰的 value。
- 添加一个 fieldset/legend 包含两种参加方式 radio;同组 name 相同,id 各不相同,并为所有控件关联 label。