目录
一、概述
二、传统控件
三、新增控件
一、概述
除了input标签外,html还有八个传统表单控件和五个html5新增的表单控件。
二、传统控件
button 定义按钮
select 定义下拉列表
option 定义下拉列表中的选项
optgroup 定义选项组,用于组合选项
textarea 定义多行的文本输入控件
fieldset 分组表单内的相关控件
legend 定义fieldset标签的标题
label 定义input标签的标注
button标签
定义按钮。标签内部可放置文本、图像或其它多媒体内容。唯一禁止使用的元素是图像映射,因为它对鼠标和键盘敏感的动作会干扰表单按钮的行为。
始终为button标签设置type特性,ie7及以下版本的浏览器的默认类型是button,而其它浏览器的默认类型是submit。
ie7及以下版本的浏览器提交button标签之间的文本,其它浏览器则会提交value特性值。
button标签比input标签更易样式化,可以添加内联html内容,如em标签、strong标签或img标签等。可以使用:after和:before伪元素实现复杂的渲染。
button标签的特性值如下所示。
autofocus 页面加载时按钮自动获得焦点
disabled 禁用按钮
form 规定按钮属于一个或多个表单(特性值为form表单的id)
formaction 覆盖form元素的action属性
formenctype 覆盖form元素的enctype属性
formmethod 覆盖form元素的method属性
formnovaliadate 覆盖form元素的novalidate属性
formtarget 覆盖form元素的target属性
name 规定按钮的名称
type 规定按钮的类型
value 规定按钮的初始值
<form action="/example/html5/demo_form.asp" method="get" id="nameform">
姓:<input type="text" name="lname" /><br />
名:<input type="text" name="fname" /><br />
</form>
<p>下面的按钮位于form标签之外,但仍是表单的一部分</p>
<button type="submit" form="nameform" value="Submit">提交</button>
select
定义下拉列表,可以包含任意数量的option和optgroup标签,标签特性如下所示。
autofocus 页面加载后自动获得焦点
disabled 禁用控件
form 规定文本区域所属的一个或多个表单
multiple 允许多选
name 规定下拉列表的名称
size 规定下拉列表中可见选项的数目,size不可为0,默认为1
option标签
定义下拉列表的选项。option标签有两个应用场景,其一下拉列表select,其二选项列表datalist。标签特性如下所示。
disabled 规定此选项应在首次加载时被禁用
label 定义当使用optgroup时所使用的标注,替代option元素内容,firefox不支持label属性
selected 规定选项在首次显示在列表中时表现为选中状态
value 定义送往服务器的选项值
当设置value特性时,服务器提交的是value特性值,否则提交给服务器的是option标签的文本内容。注意,option无法设置margin、padding、border等盒模型样式。
optgroup标签
定义选项组,用于组合选项。注意,optgroup无法设置margin、padding、border等盒模型样式。标签特性如下所示。
label 为选项组规定描述(必须)
disabled 规定禁用该选项组(可选)
<button id="btn1a" type="button">启用</button>
<button id="btn1b" type="button">禁用</button>
<button id="btn2a" type="button">可多选</button>
<button id="btn2b" type="button">不可多选</button>
<button id="btn3a" type="button">size=1</button>
<button id="btn3b" type="button">size=2</button>
<button id="btn3c" type="button">size=3</button>
<button id="btn3d" type="button">不设置size</button>
<form action="#">
<br><br>
<select name="test" id="select">
<optgroup label="num">
<option value="11" disabled>1</option>
<option value="22" selected>2</option>
<option value="33">3</option>
<option value="44" label="word">4</option>
</optgroup>
<optgroup label="word">
<option>a</option>
<option>b</option>
<option>c</option>
<option>d</option>
</optgroup>
<optgroup label="汉字" disabled>
<option value="一个">一</option>
<option value="二个">二</option>
<option value="三个">三</option>
<option value="四个">四</option>
</optgroup>
</select>
<input type="submit">
</form>
<script>
var select = document.getElementById('select');
btn1a.onclick = function(){
select.removeAttribute('disabled');
}
btn1b.onclick = function(){
select.setAttribute('disabled','');
}
btn2a.onclick = function(){
select.setAttribute('multiple','');
}
btn2b.onclick = function(){
select.removeAttribute('multiple');
}
btn3a.onclick = function(){
select.setAttribute('size','1');
}
btn3b.onclick = function(){
select.setAttribute('size','2');
}
btn3c.onclick = function(){
select.setAttribute('size','3');
}
btn3d.onclick = function(){
select.removeAttribute('size');
}
</script>
textarea标签
定义多行文本输入控件,文本区可容纳无限数量的文本。注意,浏览器不允许textarea嵌套textarea。标签特性如下所示。
name 规定文本区的名称
value 表示文本区的值
disabled 规定禁用该文本区
readonly 规定文本区为只读
注意,ie7及以下版本的浏览器不支持通过setAttribute('disabled','')的写法,必须设置为setAttribute('disabled','disabled')。ie7及以下版本的浏览器不支持通过JS设置readonly特性。
<input id="btn1" type="button" value="禁用">
<input id="btn2" type="button" value="启用">
<input id="btn3" type="button" value="只读">
<input id="btn4" type="button" value="读写">
<textarea id="test">测试内容</textarea>
<script>
btn1.onclick = function(){
test.setAttribute('disabled','');
};
btn2.onclick = function(){
test.removeAttribute('disabled');
};
btn3.onclick = function(){
test.setAttribute('readonly','readonly');
};
btn4.onclick = function(){
test.removeAttribute('readonly');
};
</script>
form 规定文本区域所属的一个或多个表单,IE浏览器不支持该属性
autofous 规定在页面加载后文本区域自动获得焦点,IE9-浏览器不支持该属性
required 规定文本区域是必填的,IE9-浏览器和safari浏览器不支持该属性
placeholder 规定描述文本区域预期值的简短提示,IE9-浏览器不支持该属性
<input id="btn1" type="button" value="placeholder='123'">
<input id="btn2" type="button" value="placeholder='abc'">
<input id="btn3" type="button" value="必填">
<input id="btn4" type="button" value="可不填">
<form action="#">
<textarea id="test" placeholder="测试内容"></textarea>
<input type="submit">
</form>
<script>
var test = document.getElementById('test');
btn1.onclick = function(){
test.setAttribute('placeholder','123');
};
btn2.onclick = function(){
test.setAttribute('placeholder','abc');
};
btn3.onclick = function(){
test.setAttribute('required','');
};
btn4.onclick = function(){
test.removeAttribute('required');
};
</script>
maxlength 规定文本区域的最大字符数,IE9-浏览器不支持该属性
<input id="btn1" type="button" value="0">
<input id="btn2" type="button" value="1">
<input id="btn3" type="button" value="6">
<input id="btn4" type="button" value="默认">
<textarea id="test"></textarea>
<script>
btn1.onclick = function(){
test.setAttribute('maxlength','0');
};
btn2.onclick = function(){
test.setAttribute('maxlength','1');
};
btn3.onclick = function(){
test.setAttribute('maxlength','6');
};
btn4.onclick = function(){
test.removeAttribute('maxlength');
};
</script>
cols 规定文本区内的可见列数
rows 规定文本区内的可见行数
注意,可以用cols和rows来规定textarea的尺寸,但更好的办法是使用CSS的height和width属性。
<form action="#">
cols:<input id="cols" pattern="\d" placeholder="请输入0-9的数字"><br>
rows:<input id="rows" pattern="\d" placeholder="请输入0-9的数字">
<input id="set" type="submit" value="设置">
<textarea id="test"></textarea>
</form>
<script>
var cols = document.getElementById('cols');
var rows = document.getElementById('rows');
var test = document.getElementById('test');
var set = document.getElementById('set');
set.onclick = function(){
test.setAttribute('cols',cols.value);
test.setAttribute('rows',rows.value);
};
</script>
wrap 规定当在表单中提交时,文本区域中折行如何处理
当特性值为soft时,表示表单提交时,虽然文字在屏幕上折行,但提交的数据里不会有换行符(默认值)。当特性值为hard时,表示表单提交时,提交的数据包含文本换行符%0D%0A。
<!--hard:?test=111111111111111111111%0D%0A1#-->
<!--soft:?test=1111111111111111111111111111#-->
<form action="#">
<input id="hard" type="button" value="wrap:hard">
<input id="soft" type="button" value="wrap:soft(默认)">
<input id="set" type="submit" value="设置">
<textarea id="test" name="test"></textarea>
</form>
<script>
var hard = document.getElementById('hard');
var soft = document.getElementById('soft');
var test = document.getElementById('test');
var set = document.getElementById('set');
hard.onclick = function(){
test.setAttribute('wrap','hard');
}
soft.onclick = function(){
test.setAttribute('wrap','soft');
}
</script>
fieldset标签
用于将表单内的相关元素分组,提升可访问性,多数浏览器用一个简单的边框来显示fieldset。特性值如下所示。
disabled 禁用fieldset
form 规定fieldset所属的一个或多个表单
name 规定fieldset的名称
legend标签
用于定义fieldset标签的标题。
<fieldset>
<legend>健康信息</legend>
身高:<input type="text" />
体重:<input type="text" />
</fieldset>
label标签
为input标签定义标注,建立文字标签与表单控件的关联。在label标签内点击文本会触发此控件,选择该文本时浏览器会自动把焦点转移到和标签相关的表单控件上。标签特性值如下所示。
for 规定label绑定到哪个表单控件
form 规定label字段所属的一个或多个表单
label标签有两种用法,其一使用for特性,其二将表单控件嵌套到label标签内部。ie6浏览器只识别使用for特性的方法。
注意,label标签的for特性值为绑定表单控件的id特性值。
<h4>使用for方法</h4>
<label for="male">Male</label>
<input type="radio" name="sex1" id="male" />
<br />
<label for="female">Female</label>
<input type="radio" name="sex1" id="female" />
<h4>使用嵌套方法</h4>
<label>Male<input type="radio" name="sex2" /></label>
<br />
<label>Female<input type="radio" name="sex2" /></label>
label标签有三个JS属性,分别是form、htmlFor和control。
form:表示label控件所归属的表单
htmlFor:表示label控件的for特性值
control:表示label控件所指定的input控件(注意:IE浏览器不支持)
<form id="myForm">
<input type="file" id="myFile">
<label for="myFile" id="myLabel">我是label</label>
</form>
<script>
var myLabel = document.getElementById('myLabel');
console.log(myLabel.form);//<form id="myForm">
console.log(myLabel.htmlFor);//'myFile'
console.log(myLabel.control);//<input type="file" id="myFile">
</script>
三、新增控件
datalist 定义输入域的选项列表
keygen 定义密钥对生成器,用于生成密钥
output 用于显示计算的结果
progress 用于显示进度(前进量)
meter 用于显示度量(剩余量)
datalist标签
规定输入域的选项列表,列表是通过option标签创建的。若要把datalist绑定到输入域,需要把输入域的list特性值设置为datalist的id特性值。option标签一定要设置value特性。注意,ie9及以下版本的浏览器及safari浏览器不支持。
<form action="#">
<input list="list" name="input">
<datalist id="list">
<option value="1">
<option value="2">
<option value="3">
</datalist>
</form>
keygen标签
规定表单的密钥生成器字段,当提交表单时,私钥存储在本地,公钥发送到服务器。注意,safari和ie不支持该属性,chrome部分支持该属性。
autofocus 页面加载时获得焦点
challenge 如果使用,则将keygen的值设置为在提交时询问
disabled 禁用keygen字段
form 定义所属的一个或多个表单
keytype 定义keytype,rsa生成RSA密钥(默认)
name 定义keygen元素的唯一名称
<!--firefox: 1->usr_name=1&security=MIIBOjCBpDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1HUwmm%2B75QTnuDXC%0D%0AnUsL8cD8KkncFnA6TRaJttYss0Oi6dVzOPOtdK0O7wxD4%2BIhjSMZRD%2FddKFciZw0%0D%0AURyAimXxe%2FlDKmR3Nb1SzmqA7RJnns%2FA%2BduiYeeIIiMSL2ydUOvQvVFYMtaDkWra%0D%0AtpQfeWv1Hjz9hb7HlGzOUbtGrAECAwEAARYAMA0GCSqGSIb3DQEBBAUAA4GBAJ0I%0D%0ATWv7CdcNzqkaq5OpN6GHWtrlIpD5UAL%2FOiFDICb%2F8PFgV7FQk0MaGwj5XzQfEu4B%0D%0A6YlAbyz2l91I9%2FJW6Oerru5wL646OpvnTvD2U%2FzByU%2FHWp0BRNeDqntMAsGvzl6D%0D%0AoNsHTwLjDUGYVILge4syfcQVRpFRZiyVRaNlIJT9#-->
<form action="#">
Username: <input type="text" name="usr_name" />
Encryption: <keygen name="security" />
<input type="submit" />
</form>
output标签
用于显示计算的结果。这是一个语义化标签,定义不同类型的输出,比如脚本的输出。注意,ie浏览器不支持该标签。标签特性如下所示。
for 定义输出域相关的一个或多个标签
form 定义输入字段所属的一个或多个表单
name 定义对象的唯一名称
<form oninput="x.value=parseInt(a.value)+parseInt(b.value)">
0<input type="range" id="a" value="50">100
+<input type="number" id="b" value="50">
=<output name="x" for="a b"></output>
</form>
progress标签
用来表示任务的进度或进程(常用于表示过程)。注意,ie9及以下版本的浏览器及safari浏览器不支持。
max 规定任务一共需要多少工作
value 规定已完成多少工作
如果progress控件什么属性都不设置,则会有进度条左右往返运动的效果。
<progress></progress>
<input id="btn" type="button" value="开始下载">
下载进度:<progress id="test" value="0" max="100"></progress>
<script>
var oTimer;
btn.onclick = function(){
if(oTimer){
return;
}
oTimer = setInterval(function(){
test.value++;
if(test.value >= test.max){
clearInterval(oTimer);
}
},50);
}
</script>
meter标签
meter元素用于显示剩余容量或剩余库存(常用于表示状态),注意,ie浏览器及safari浏览器不支持。标签特性如下所示。
form 规定标签所属的一个或多个表单
high 规定被视作高的值的范围
low 规定被视作低的值的范围
max 规定范围的最大值
min 规定范围的最小值
optimum 规定度量的最优值
value 规定度量的当前值(必需)
注意,min < low < high < max。
<input id="btn" type="button" value="增加库存">
库存量:<meter id="test" value="10" min="0" low="30" optimum="60" high="80" max="100" ></meter>
<script>
var oTimer;
btn.onclick = function(){
if(oTimer){
return;
}
oTimer = setInterval(function(){
test.value++;
if(test.value >= test.max){
clearInterval(oTimer);
}
},50);
};
</script>
如果meter标签的value特性,取值为小数,如0.3,且没有max属性值时,则颜色块显示为宽高的30%。
<meter value="0.3"></meter>