HTML中使用 <select> 和 <option> 元素创建选择框。而 <select> 元素对应的是 HTMLSelectElement 接口,<option> 元素对应的是 HTMLOptionElement 接口。这两个接口都是通过 HTMLElement 接口从其他 HTML 元素共享所有属性和方法。
先从 <select> 元素对应的 HTMLSelectElement 接口开始介绍专属的属性和方法。
下面介绍一下<select> 元素根据不同选中状态下的value属性的值:
<select name="location" id="selLocation">
<option value="Sunnyvale, CA">Sunnyvale</option>
<option value="Los Angeles, CA">Los Angeles</option>
<option value="Mountain View, CA">Mountain View</option>
<option value="">China</option>
<option>Australia</option>
</select>
当选中选项框中的第一项时,<select> 元素的 value 值为 "Sunnyvale, CA";而选中第四项时,<select> 元素的 value 值为 "",因为该项的 value 属性是空字符串;选中最后一项,则 value 值为 "Australia",因为该 <option> 元素没有指定 value 属性。
因此,根据以上的例子,<select> 元素的value属性根据以下规则获取值:
再介绍 <option> 元素对应的 HTMLOptionElement 接口专属属性和方法。
这里强调一下,<select> 元素的 change 事件与其它表单字段是不一样的。其它表单字段会在自己的值改变后触发 change 事件,然后字段失去焦点。而 <select> 会在选中一项时立即触发 change 事件。
对于只允许选择一项的 <select> 元素,获取选项最简单的方式是使用 <select> 元素的 selectIndex 属性,如下面的例子:
let selectedOption = selectbox.options[selectbox.selectedIndex];
获取到 <option> 元素后,就可以根据 <option> 元素的属性和方法获取想要的信息。
对于允许多选的 <select> 元素,selectedIndex 属性就像只允许选择一项一样。设置 selectedIndex 会移除所有选项,只选择指定的项,而获取 selectedIndex 只会返回选中的第一项的索引。
选项还可以通过取得选项的引用并将其 selected 属性设置为 true 来选中。例如,以下代码会选中 <select> 的第一项:
selectbox.options[0].selected = true;
与 selectedIndex 不同,设置选项的 selected 属性不会在多选时移除其他选项,从而可以动态选择任意多个选项。如果修改单选框中选项的 selected 属性,则其他选项会被移除。要注意的是,把 selected 属性设置为 false 对单选框没有影响。
通过 selected 属性可以确定选择框中哪个选项被选中。要取得所有选中项,需要循环选项集合逐一检测 selected 属性,比如:
function getSelectedOptions(selectbox){
let result = new Array();
for (let option of selectbox.options) {
if (option.selected) {
result.push(option);
}
}
return result;
}
可以使用 JavaScript 动态创建选项并将它们添加到选择框。首先,可以使用 DOM 方法,如下所示:
let newOption = document.createElement("option");
newOption.appendChild(document.createTextNode("Option text"));
newOption.setAttribute("value", "Option value");
selectbox.appendChild(newOption);
以上代码创建了一个新的<option>元素,使用文本节点添加文本,设置其 value 属性,然后将其添加到选择框。添加到选择框之后,新选项会立即显示出来。
浏览器原生提供 Option() 构造函数创建 HTMLOptionElement 实例:
new Option(text, value, defaultSelected, selected) : HTMLOptionElement
来看案例:
let newOption = new Option("Option Text", "Option Value", true);
创建之后,需要将该实例添加到 HTML 的 <select> 元素中,这里有两种添加方法:
这里详细介绍下 add() 方法:
add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number | null): void;
如果想要符合所有浏览器的规范,可以传入 undefined 作为第二个参数。
let newOption = new Option("Option text", "Option value", true);
selectbox.add(newOption, undefined);
这里注意一下 defaultSelected 和 selected 两个参数,有时候容易弄混。selected 属性为 true 时,该 <option> 当前状态处于已选择状态。defaultSelected 属性为 true 时,表示 <option> 在默认情况下为已选择状态,但不代表 <option> 的当前状态是已选择状态。当页面重置时,selected 属性值为 true 的 <option> 可能会变成未选择状态,而 defaultSelected 属性值为 true 的 <option> 则一定会变成已选择状态。
移除 <option> 元素的方法也不止一种,下面列举的方法都可以实现:
要清除选择框的所有选项,需要迭代所有选项并逐一移除它们,如下面例子所示:
function clearSelectbox(selectbox) {
for (let index = 0; index < selectbox.options.length;) {
selectbox.remove(0);
}
}
使用 DOM 操作中的 appendChild() 方法实现从一个 <select> 元素中将 <option> 移到另一个 <select> 元素中,这种实现方法会将 <option> 元素先从其父元素中移除,然后再插入指定位置。如下所示:
let selectbox1 = document.getElementById("selLocations1");
let selectbox2 = document.getElementById("selLocations2");
selecbox2.appendChild(selectbox1.options[0]);
移动选项和移除选项都会导致每个 <option> 的 index 属性重置。
重排 <option> 的话,使用 DOM 操作中的 insertBefore() 方法,而移到最后位置,还是使用 appendChild() 方法较为方便。
下面的代码演示了将一个 <option> 在 <select> 中前移一个位置:
let optToMove = selectbox.options[1];
selectbox.insertBefore(optToMove, selectbox.options[optionToMove.index-1]);
这个例子首先获得要移动 <option> 的索引,然后将其插入之前位于它前面的 <option> 之前,其中第二行代码适用于除第一个 <option> 之外的所有 <option>。下面的代码则可以将<option>向下移动一个位置:
let optionToMove = selectbox.options[1];
selectbox.insertBefore(optionToMove,
selectbox.options[optionToMove.index+2]);
<select> 和 <option> 是在 HTML 页面布局时,经常使用的表单控件,学会使用与之对应的 HTMLSelectElement 和 HTMLOptionElement 接口中的属性和方法会很容易的操控 <select> 和 <option> 元素。借助于 DOM 操作 <select> 和 <option> 也较为方便。
一篇文章我们说了单行文本框和多行文本框,今天呢我们继续看一下表单的其它控件:单选框、复选框、下拉框。
在我们表单页面中,经常会有选择性别或者选择爱好这类的内容,使用选择框是一个好主意,html中有两种选择框,即单选框和复选框,两者的区别是单选框中的选项用户只能选择一项,而复选框中用户可以任意选择多项,甚至全选。
使用语法:
单选框:<input type="radio" value="值" name="名称" checked="checked"/>
复选框:<input type="checkbox" value="值" name="名称" checked="checked"/>
详细讲解:
1、type: 当 type="radio" 时,控件为单选框;当 type="checkbox" 时,控件为复选框
2、value:提交数据到服务器的值(后台程序使用)
3、name:为控件命名,这里要注意同一组的单选按钮,name 取值一定要一致(具体可见下边的参考练习)。
4、checked:当设置 checked="checked"(也可以直接简写成checked) 时,该选项被默认选中
使用练习:
我们创建一个表单,表单里边包含姓别(男、女)选择的单选框,默认选中男以及爱好(唱歌、打游戏、绘画、旅游)选择的多选框,默认选中唱歌。具体的代码如下图所示:
在网页中的显示效果就如下图所示:
下拉框也是我们常用的一个表单控件,多用于选择城市地区等。
使用语法:
<select>
<option value="向服务器提交的内容" selected="selected">网页显示的内容</option>
</select>
详细讲解:
1、option:option为select下拉子元素,可以有一个或多个,写法类似ul和li,其中的value内容为提交数据到服务器的值(后台程序使用)
2、selected:当设置 selected="selected"(也可以直接简写成selected) 时,该选项被默认选中
使用练习:
我们创建一个表单,表单里边包含一个城市的下拉框,下拉框中有北京、上海、天津这三个城市,其中默认选中天津。具体的代码如下图所示:
在网页中的显示效果就如下图所示:
好了,本篇文章就先给大家介绍这几个表单控件的语法以及使用,下篇文章我们将介绍按钮的语法及使用以及完整的表单练习演示,记得平时要多加练习才是王道。
每日金句:做人要像竹子一样每前进一步,都要做一次小结。喜欢我的文章的小伙伴记得关注一下哦,每天将为你更新最新知识。
eb前端开发课程:html表单-单选框多选框。
讲课人:波波老师。
radio单选框、checkbox多选框,这两个只需要选择不需要输入。现在来看一下单选框和多选框的演示。
·首先是单选框,输入一个inputradio,可以看到默认给了两个属性:name和id。把name="radio",id="radio1"。当然光一个单选框也没有用,还需要给它加一个label,for-"radio1",这个4abel for="">。这里要放上前面这个(单选框的id)"radio1",代表着这是它的label。
·这里输入一个单选选项一,可以看到点击单选选项一,同时也可以把radio选中,这就是label的作用。多复制几个,可以看到选择"选项一"它被选中了,选择选项二,选项二被选中的时候,选项一的选中状态就被去掉了,它们三个只能选中一个,这就叫单选框。它们是以什么为同组标准的?就是以name为同组标准。
·假设现在再建一个单选框<input>,选择name="radioradio",id"radio4",label for="radio4"。单选选项4,选择1234,选4的时候对前面三个选项不产生影响,这就是单选框。
·接着再来看多选框,多选框,input:checkbox,4abel for="checkbox1"。选项一,把这行复制一下,可以看多选框也输入完了。点击多选框,可以看到它是可以同时选择多个项目的,这就是多选框。
*请认真填写需求信息,我们会在24小时内与您取得联系。