TML 表单用于搜集不同类型的用户输入。HTML5 Input,拥有多个新的表单输入类型,提供了更好的输入控制和验证,今天将为大家带来HTML中的表单及其input输入类型。
一、HTML表单
1、HTML表单用于收集不同类型的用户输入,是一个包含表单元素的区域并且允许用户在表单中输入内容,比如文本域(textarea)、下拉列表、单选框(radio=buttons)、复选框(checkboxes)等。
2、表单使用标签<form>来设置,示例:
运行结果:
二、HTML表单属性:
1、HTML表单包含表单元素,表单元素是指不同类型的input元素、复选框、单选按钮、提交按钮等。
2、action属性
在上面的示例中出现了action属性,action属性定义在提交表单执行的动作,向服务器提交表单的通常做法是使用提交按钮。
通常,表单会被提交到web服务器上的网页,上面的例子中,则指定了某个服务器脚本来处理被提交表单。
如果省略 action 属性,则 action 会被设置为当前页面。
3、method 属性
method属性规定在提交表单时所用的 HTTP 方法(GET 或 POST):
如果表单提交是被动的(比如搜索引擎查询),并且没有敏感信息,使用get。
如果表单正在更新数据,或者包含敏感信息(例如密码),使用post。
4、如果要正确地被提交,每个输入字段必须设置一个 name 属性,示例:
<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
First name:<br>
<input type="text" name="Firstname" value="Mickey">
<br>
Last name:<br>
<input type="text" name="lastname" value="Mouse">
<br><br>
<input type="submit" value="Submit">
</form>
<p>如果您点击提交,表单数据会被发送到名为 demo_form.asp 的页面。</p>
<p>first name 不会被提交,因为此 input 元素没有 name 属性。</p>
</body>
</html>
运行结果:
5、target 属性
target 属性规定提交表单后在何处显示响应,target 属性可设置以下值之一:
默认值为 _self,这意味着响应将在当前窗口中打开。
6、Autocomplete 属性
autocomplete 属性规定表单是否应打开自动完成功能。
启用自动完成功能后,浏览器会根据用户之前输入的值自动填写值,示例:
运行结果:
7、所有<form>属性的列表:
三、HTML表单元素:
1、<input>元素是最重要的表单元素,有很多的形态,根据不同的type属性,例如:
① 文本输入(text),示例:
<!DOCTYPE html>
<html>
<body>
<form>
First name:<br>
<input type="text" name="firstname">
<br>
Last name:<br>
<input type="text" name="lastname">
</form>
<p>请注意表单本身是不可见的。</p>
<p>同时请注意文本字段的默认宽度是 20 个字符。</p>
</body>
</html>
运行结果:
② 单选按钮输入(radio),示例:
<!DOCTYPE html>
<html>
<body>
<form>
<input type="radio" name="sex" value="male" checked>Male
<br>
<input type="radio" name="sex" value="female">Female
</form>
</body>
</html>
运行结果:
③ 提交按钮(submit),示例:
<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
First name:<br>
<input type="text" name="firstname" value="Mickey">
<br>
Last name:<br>
<input type="text" name="lastname" value="Mouse">
<br><br>
<input type="submit" value="Submit">
</form>
<p>如果您点击提交,表单数据会被发送到名为 demo_form.asp 的页面。</p>
</body>
</html>
运行结果:
2、<select>元素
<select>元素定义下拉列表,示例:
<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
<br><br>
<input type="submit">
</form>
</body>
</html>
运行结果:
3、<fieldset>元素
<fieldset>元素组合表单中的相关数据
<legend>元素为<fieldset>元素定义标题,示例:
<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
<fieldset>
<legend>Personal information:</legend>
First name:<br>
<input type="text" name="firstname" value="Mickey">
<br>
Last name:<br>
<input type="text" name="lastname" value="Mouse">
<br><br>
<input type="submit" value="Submit">
</fieldset>
</form>
</body>
</html>
运行结果:
4、<textarea> 元素
<textarea> 元素定义多行输入字段(文本域)、示例:
<!DOCTYPE html>
<html>
<body>
<form>
<textarea name="message" rows="10" cols="30">
The cat was playing in the garden.
</textarea>
</form>
</body>
</html>
运行结果:
5、HTML5<datalist>元素
<datalist> 元素为 <input> 元素规定预定义选项列表。
用户会在他们输入数据时看到预定义选项的下拉列表。
<input> 元素的 list 属性必须引用 <datalist> 元素的 id 属性,示例:
<!DOCTYPE html>
<html>
<body>
<form action="/demo/demo_form.asp">
<input list="browsers" name="browser">
<datalist id="browsers">
<option value="Internet Explorer">
<option value="Firefox">
<option value="Chrome">
<option value="Opera">
<option value="Safari">
</datalist>
<input type="submit">
</form>
</body>
</html>
运行结果:
四、HTML表单输入类型
输入类型 | 定义 |
text | 定义供文本输入的单行输入字段 |
password | 定义密码字段 |
submit | 定义提交表单数据至表单处理程序的按钮 |
radio | 定义单选按钮 |
checkbox | 定义复选框 |
<input>中的type:
类型 | 定义 |
radio | 定义单选按钮 |
checkbox | 定义复选框 |
button | 定义按钮 |
number | 用于应该包含数字值的输入字段 |
date | 用于应该包含日期的输入字段 |
color | 用于应该包含颜色的输入字段 |
range | 用于应该包含一定范围内的值的输入字段 |
month | 允许用户选择月份和年份 |
week | 允许用户选择周和年 |
time | 允许用户选择时间(无时区) |
datetime | 允许用户选择日期和时间(有时区) |
datetime-local | 允许用户选择日期和时间(无时区) |
用于应该包含电子邮件地址的输入字段 | |
search | 用于搜索字段(搜索字段的表现类似常规文本字段) |
tel | 用于应该包含电话号码的输入字段 |
url | 用于应该包含 URL 地址的输入字段 |
输入限制:
这就是有关HTML表单的大概内容了,希望这篇HTML的表单及其input输入类型的知识点能对大家有所帮助。
篇文章主要的向大家介绍了关于html input标签的单选按钮的使用方法,还有关于HTML input标签的单选默认按钮的做法。接下来我们一起来看看这篇文章吧
<input> 标签用于搜集用户信息。根据不同的type属性值,输入字段拥有很多种形式。输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等。
> <form action="form_action.asp" method="get">
>
> <input type="radio" name="radio" value="1">单选1
>
> <input type="radio" name="radio" value="2">单选2
>
> <input type="radio" name="radio" value="3">单选3
>
> <input type="radio" name="radio" value="4">单选4
>
> </form>
这个的效果很容易看到,我们还是先看看浏览器中的显示效果吧:
这个效果一眼就能看到,很简单的一个代码
还有种是很多网站上都是经常见到的,比如:单选性别,这个基本上都是用这种单选框去制作的。代码如下:
HTML中的单选按钮实现男女性别选择,不让男女同是都能都能选择,实现方法:在按钮的属性里写一个name属性,并且把name的值设置成相同的
> <input id="man" type="radio" checked="checked" name="1" />男
>
> <input id="woman" type="radio" name="1"/>女
这个就不给图了,比上面那个还简单,就两个单选框,我们经常遇到的这个。
现在来说说HTML单选框按钮怎么默认选中:
首先我们先把第一个实例拿出来继续说,我们只需要在其中加一个属性,如下:
> <form action="form_action.asp" method="get">
>
> <input type="radio" name="radio" value="1">单选1
>
> <input type="radio" name="radio" value="2" checked>单选2
>
> <input type="radio" name="radio" value="3">单选3
>
> <input type="radio" name="radio" value="4">单选4
>
> </form>
这上面我没做任何的点击,自己出现在那上面的,刷新过后还能看到在单选2上面。
我们就可以看到,这样就把单选框给默认选中了,大家可以自己试试,多敲敲代码。
好了,以上就是这篇关于html input标签做单选按钮的文章了,有问题的可以在下方提问。
以上就是html单选按钮默认选中怎么做?input标签的单选按钮用法实例的详细内容,更多请关注我!!!
我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年我花了一个月整理了一份最适合2020年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。
内容是《Web前端开发之Javascript视频》的课件,请配合大师哥《Javascript》视频课程学习。
按钮Button:
按钮是最常用的表单元素之一,有两种形式的按钮,button按钮和radio单选、checkbox复选按钮;
提交和重置元素本身就是按钮,并且有相关联的默认动作,如果其click事件处理程序返回false,也就取消它的默认行为了;也可以使用它们的click事件来执行表单的验证及提交,但最为常用的还是使用form对象本身的submit事件进行验证和提交;
普通按钮是没有默认行为的,一般来说使用它们来执行自定义脚本,当然也可以用它来执行form.submit()方法来提交表单;
对于type为”submit”或type=”image”的按钮,HTML5新增了formaction、formmethod、formenctype、formtarget属性,其中formaction属性用于覆盖form的 action属性,作用是为不同的提交按钮增加formaction属性,使得在单击时可以将表单提交给不同的页面;formmethod属性为每个不同的提交按钮分别指定不同的提交方法;formenctype属性为每个不同的提交按钮分别指定不同的编码方式;formtarget属性用于为每个不同的提交按钮指定在何处打开提交页面;这些属性在Javascript中都有相对应的同名属性,如:
<form action="demo.php">
<input type="submit" formaction="center/" formmethod="GET" formtarget="_blank" formenctype="multipart/form-data" value="用户中心" />
<input type="submit" formaction="admin/" formmethod="POST" formaction="_self" formenctype="application/x-www-form-urlencoded" value="后台管理" />
</form>
<script>
var btnSubmit = document.forms[0].elements[0];
console.log(btnSubmit.formAction);
console.log(btnSubmit.formMethod);
console.log(btnSubmit.formTarget);
console.log(btnSubmit.formEnctype);
</script>
radio单选和checkbox复选按钮(框)是开关按钮,其只有两种状态:选中或未选中;
<form id="myForm" name="myForm">
<p>性别:
<input type="radio" name="sex" id="male" value="1" />男
<input type="radio" name="sex" id="remale" value="0" checked />女
</p>
<p>课程:
HTML<input type="checkbox" name="course" id="c1" value="HTML" />
CSS<input type="checkbox" name="course" id="c2" value="CSS" checked />
JavaScript<input type="checkbox" name="course" id="c3" value="JavaScript" />
</p>
</form>
<script>
var male = document.getElementById("male");
console.log(male); // <input>
male = document.forms["myForm"].elements["male"];
console.log(male); // <input>
</script>
单选和复选按钮都定义了checked属性,该属性为可读写的布尔值;defaultChecked属性对应的是HTML的checked属性,也是布尔值,它指定了元素在第一次加载页面时是否选中;
var male = document.forms["myForm"].elements["male"];
var remale = document.forms["myForm"].elements["remale"];
console.log(male.checked); // false
console.log(male.defaultChecked); // false
console.log(remale.checked); // true
console.log(remale.defaultChecked); // true
male.checked = true;
console.log(male.checked); // true
console.log(male.defaultChecked); // false
console.log(remale.checked); // false
console.log(remale.defaultChecked); // true
male.defaultChecked = true;
console.log(male.checked); // true
console.log(male.defaultChecked); // true
console.log(remale.checked); // false
console.log(remale.defaultChecked); // true
checked会令一个单选按钮组中所有元素互斥,defaultChecked也是可写的(W3C定义其是只读的,所以写入的操作是不规范的),但它不是互斥的;所以可以利用这两个属性把单选按钮恢复到默认的状态,如:
male.checked = true;
male.checked = male.defaultChecked;
remale.checked = remale.defaultChecked;
对于复选框,也是类似的,但其checked不是互斥的,因为它本身就允许多选;
例如:复位单选和复选状态;
<p><input type="button" value="重置单选和复选" id="resetRadioCheckbox" /></p>
<script>
var resetRadioCheckbox = document.getElementById("resetRadioCheckbox");
resetRadioCheckbox.onclick = function(){
// var radioList = document.querySelectorAll('input[type="radio"]');
var radioList = document.getElementsByName("sex"); // 也可以
console.log(radioList);
for(var i=0,len=radioList.length; i<len; i++)
radioList[i].checked = radioList[i].defaultChecked;
var checkList = document.getElementsByName("course");
for(var i=0,len=checkList.length; i<len; i++)
checkList[i].checked = checkList[i].defaultChecked;
}
</script>
单选和复选按钮本身并不显示任何文本,它们通常和相邻的HTML文本一起显示或与<label>元素相关联,所以其value属性并不显示出来,而只是为了提交给服务端;
var radioList = document.getElementsByName("sex");
for(var i=0,len=radioList.length; i<len; i++){
if(radioList[i].checked)
console.log("被选中的值是:" + radioList[i].value);
}
var checkList = document.getElementsByName("course");
var checkStr = "";
for(var i=0,len=checkList.length; i<len; i++){
if(checkList[i].checked)
checkStr += checkList[i].value + ",";
}
if(checkStr != "")
checkStr = checkStr.substring(0,checkStr.length - 1);
else
checkStr = "无";
console.log("被选中的值是:" + checkStr);
同时,也会根据获取来的值来设置单选或复选按钮的选中状态,如:
window.onload = function(){
var sexValue = 1; // 从服务端获取
var radioList = document.getElementsByName("sex");
for(var i=0,len=radioList.length; i<len; i++){
if(radioList[i].value == sexValue){
radioList[i].checked = true;
break;
}
}
var courseValue = "JavaScript,HTML"; // 从服务端获取
var arrCourse = courseValue.split(",");
var checkList = document.getElementsByName("course");
for(var i=0,len=checkList.length; i<len; i++){
// if(arrCourse.indexOf(checkList[i].value) >= 0) // 或者
if(arrCourse.includes(checkList[i].value))
checkList[i].checked = true;
else
checkList[i].checked = false;
}
}
其往往成组并使用共享的name,如果使用共享的name获取这些元素时,返回是一个类数组而不是单个元素;
<script>
var sex = document.getElementsByName("sex");
console.log(sex); // NodeList
var sex = document.forms["myForm"].elements["sex"];
console.log(sex); // RadioNodeList
</script>
使用elements集合,返回的类型是更具体的RadioNodeList,该类型拥有一个value属性,返回单选按钮组中选中的value值;该属性是可读写的,在设置value属性时,value属性等于值的第一个单选按钮元素将被设置为checked,如:
console.log(sex.value); // 0
sex.value = "1"; // 男就被选中的
console.log(sex.value);
radio单选按钮的本意就是在一组单选按钮组中只能选择唯一一个,如果只有一个radio按钮,是没有多大实际意义的;即使如此,如果使用elements属性,其返回的就不是NodeList,而是单个元素对象;
<p><input type="radio" id="single" name="single" value="单个按钮" /></p>
</form>
<script>
var single = document.forms[0].elements["single"];
console.log(single); // <input>
single.checked = true;
console.log(single.checked);
console.log(single.defaultChecked);
console.log(single.value); // 单个按钮
</script>
在获取checkbox时,如:
var courses = document.getElementsByName("course");
console.log(courses); // NodeList<input>
var courses = document.forms["myForm"].elements["course"];
console.log(courses); // RadioNodeList<input>
虽然当前为checkbox组,并不是radio组,但返回的也是RadioNodeList,并不是类似的CheckboxNodeList类型,而且也不存在这个类型;
其返回的RadioNodeList集合的value属性无用;获取所有选中复选按钮的值,可以遍历所有被选中的选项;
当单击单选或复选按钮时,会触发onclick事件,如果单击时改变了开关按钮的状态,也会触发change事件;
var sexList = document.forms[0].elements["sex"];
for(var i=0,len=sexList.length; i<len; i++){
var sex = sexList[i];
sex.addEventListener("change", function(event){
console.log(event.target.checked);
console.log(event.target.defaultChecked);
});
}
var courseList = document.forms[0].elements["course"];
var log = document.getElementById("log");
var arrCourse = [];
for(var i=0,len=courseList.length; i<len; i++){
if(courseList[i].checked)
arrCourse.push(courseList[i].value);
}
console.log(arrCourse.join());
log.innerText = arrCourse.join();
for(var i=0,len=courseList.length; i<len; i++){
var course = courseList[i];
course.addEventListener("change", function(event){
if (event.target.checked) {
arrCourse.push(event.target.value);
}else{
arrCourse.splice(arrCourse.indexOf(event.target.value),1);
}
console.log(arrCourse.join());
log.innerText = arrCourse.join();
},false);
}
示例:全选:
<p>
HTML<input type="checkbox" name="course" value="HTML" />
CSS<input type="checkbox" name="course" value="CSS" />
JavaScript<input type="checkbox" name="course" value="JavaScript" />
</p>
<p><button id="all">全选</button>
<button id="not">全不选</button>
<button id="reverse">反选</button></p>
<script>
var chkBoxs = document.getElementsByName("course");
// 全选
var all = document.getElementById("all");
all.onclick = function(){
for(var i=0; i<chkBoxs.length; i++){
chkBoxs[i].checked = true;
}
}
// 全不选
var not = document.getElementById("not");
not.onclick = function(){
for(var i=0; i<chkBoxs.length; i++){
chkBoxs[i].checked = false;
}
}
// 反选
var reverse = document.getElementById("reverse");
reverse.onclick = function(){
for(var i=0; i<chkBoxs.length; i++){
chkBoxs[i].checked = !chkBoxs[i].checked;
}
}
</script>
示例:同意提交
<div id="content">
<p>Lorem ...</p>
</div>
<p><label>同意此协议</label><input type="checkbox" id="cbAgree" disabled /></p>
<input type="submit" value="提交" id="btnSubmit" disabled />
<script>
window.onload = function(){
var cbAgree = document.getElementById("cbAgree");
var btnSubmit = document.getElementById("btnSubmit");
var s = 5;
var timer = setInterval(function(){
btnSubmit.value = "等待" + s + "秒";
if(--s < 0){
clearInterval(timer);
btnSubmit.value = "提交";
cbAgree.disabled = false;
}
},1000);
cbAgree.addEventListener("change", function(event){
btnSubmit.disabled = !cbAgree.checked;
},false);
}
</script>
Label标签元素:
其与其它表单元素关联,关联的方式有两种:一是使用for属性,二是将<input>直接嵌套在<label>中,在这种情况下,不需要for和id属性,因为关联是隐式的;
表单的elements集合中并不包括Lable;
Label属性:
var label = document.getElementsByTagName("label")[1];
console.log(label);
console.log(label.form);
console.log(label.control);
console.log(label.htmlFor);
label.htmlFor = "c2";
console.log(label.control); // checkbox
console.log(label.htmlFor); // c2
表单元素的labels属性:只读,返回表单元素关联的所有<label>元素的NodeList,如:
<p><label for="content">内容:</label><br/>
<textarea id="content" name="content"></textarea><br/>
<label for="content">请输入简要的内容</label></p>
</form>
<script>
var content = document.forms["myForm"].elements["content"];
console.log(content.labels); // NodeList(2)
var label = content.labels[0];
console.log(label); // label
console.log(label.textContent); // 内容:
console.log(label.form); // <form>
console.log(label.control); // textarea#content
console.log(label.htmlFor); // content
</script>
select选择框:
选择框是通过<select>和<option>元素创建的,其属于HTMLSelectElement类型,浏览器通常将其渲染为下拉菜单的形式或设置其size属性大于1呈现为列表的形式;
<form id="myForm" name="myForm">
<select name="province" id="province">
<option value="beijing" label="大北京">北京</option>
<option>安徽</option>
<option value="jiangsu">江苏</option>
<option value="guangdong">广东</option>
<option value="shangdong">山东</option>
</select>
</form>
其拥有除了所有表单元素共有的属性和方法外,还提供了:
var province = document.forms[0].elements["province"];
console.log(province.options); // HTMLOptionsCollection
该集合拥有length、selectedIndex属性和add()及remove()方法;其中selectedIndex返回的是选中项的索引;通过options的索引可以返回一个option对象;
console.log(province.options.selectedIndex); // 2
console.log(province.selectedIndex); // 2
console.log(province.options[1]); // <option>
通过select对象的item(index)方法或select的索引也可以返回一个option对象;
var opt = selectbox.item(1);
var opt = selectbox[1];
console.log(opt);
console.log(opt.index);
console.log(opt.text);
每个<option>元素属于HTMLOptionElement类型,该类型继承自成 HTMLElement,其拥有下列属性:
设置这些属性的目的,是为了方便对选项数据的访问,虽然可以使用常规的DOM功能来访问这些信息,但效率比较低:
var province = document.forms[0].elements["province"];
// 不推荐
// var text = province.options[0].firstChild.nodeValue;
var text = province.options[0].textContent; // 或
var value = province.options[0].getAttribute("value");
console.log(text, value);
// 推荐
var text = province.options[0].text;
var value = province.options[0].value;
console.log(text, value);
console.log(province.options[0].index);
console.log(province.options[0].selected);
console.log(province.options[0].label);
province.options[2].selected = true;
// options[1]没有value,所以返回其text
console.log(province.options[1].value);
在未指定value特性的情况下,IE7会返回空字符串,其他会返回与text特性相同的值;
<opggroup>:
<optgroup>HTML元素在<select>元素中创建一组选项,其属于HTMLOptGroupElement类型,属性为:
disabled:是一个布尔值,表示整个子项列表<option>是否已禁用(true)或未禁用(false);
label:表示组label属性;
<form>
<select id="selectbox">
<optgroup label="前端" disabled>
<option>HTML</option>
<option>CSS</option>
<option>JavaScript</option>
</optgroup>
<optgroup label="后端">
<option>C#</option>
<option>Java</option>
<option>PHP</option>
</optgroup>
</select>
<script>
var selectbox = document.getElementById("selectbox");
var optgroup = selectbox.getElementsByTagName("optgroup")[0];
console.dir(optgroup); // HTMLOptGroupElement
console.dir(optgroup.label); // 前端
</script>
选择选项:
对于只允许选择一项的选择框,最简单的方式就是直接使用selectedIndex属性,利用此属性既可以获取选中的项,也可设置某个项被造中;如:
var selectedIndex = province.selectedIndex;
var selectedOption = province.options[selectedIndex];
console.log("选中项的索引:" + selectedIndex + ",text" + selectedOption.text + ",value:" + selectedOption.value);
province.selectedIndex = 1; // 根据索引设置选中项
var selectedIndex = province.selectedIndex;
var selectedOption = province.options[selectedIndex];
console.log("选中项的索引:" + selectedIndex + ",text" + selectedOption.text + ",value:" + selectedOption.value);
对于multiple多项的选择,单个selectedIndex属性不足以表示被选中的多个选项,即使选中多个,读取则只会返回选中项第一项的索引值且其value值也是第一个选中的Option的value值;
selected属性:另一种选择选项的方式,即取得某一项的引用,然后将其selected属性设置为true;
console.log(province.options[0].selected); // false
console.log(province.options[2].selected); // true
province.options[0].selected = true;
province.options[1].selected = true;
与selectedIndex不同的是,在允许多选的选择框中设置选项的selected属性,不会取消对其他选中项的选择,因而可以动态选中任意多个项;但如果是在单选择框中,会取消对其他选择的选择;
selected属性的作用主要是确定用户选择了选择框中的哪些项;要取得所有选中的项,可以遍历Options选项集合,逐个测试每个选项的selected属性:
var province = document.forms[0].elements["province"];
function getSelectedOptions(selectbox){
var result = new Array();
var option = null;
for(var i=0, len=selectbox.options.length; i<len; i++){
option = selectbox.options[i];
if(option.selected){
result.push(option);
}
}
return result;
}
var province = document.forms[0].elements["province"];
var selectedOptions = getSelectedOptions(province);
var msg = "";
for(var i=0,len = selectedOptions.length; i<len; i++){
msg += "index:" + selectedOptions[i].index + ",text:" + selectedOptions[i].text + ",value:"+ selectedOptions[i].value + ";";
}
console.log(msg);
selectedOptions属性:只读属性,其返回当前选定的<option>元素的HTMLCollection;
console.log(province.selectedOptions); // HTMLCollection
如果是select-one单选,其中包含一个option,如果是select-mutiple多选,就包括所有选定的option;
例如:获取所有选中项
<label for="foods">你喜欢吃什么?</label><br>
<select id="foods" name="foods" size="7" multiple>
<option value="1">苹果</option>
<option value="2">香蕉</option>
<option value="3">桔子</option>
<option value="4">披萨</option>
<option value="5">西红柿</option>
</select>
<br>
<button name="order" id="order">确定</button>
<p id="output"></p>
<script>
var orderButton = document.getElementById("order");
var itemList = document.getElementById("foods");
var outputBox = document.getElementById("output");
orderButton.addEventListener("click", function() {
var collection = itemList.selectedOptions;
var output = "";
for (var i=0; i<collection.length; i++) {
if (output === "") {
output = "你喜欢吃的食物如下:";
}
output += collection[i].text;
if(i === (collection.length - 2) && (collection.length < 3))
output += "和";
else if(i < (collection.length - 2))
output += ",";
else if(i === (collection.length - 2))
output += "和";
}
if(output === "")
output = "你啥也不喜欢";
outputBox.innerHTML = output;
}, false);
</script>
添加选项:
可以动态添加选项,并将它们添加到选择框中;有多种添加的方式:
第一种:使用DOM方法:
var newOption = document.createElement("option");
newOption.appendChild(document.createTextNode("天津"));
// newOption.setAttribute("value", "tianjin");
newOption.value = "tianjin";
selectbox.appendChild(newOption);
第二种:使用Option构造函数来创建新选项:
语法:var option = new Option(text?, value?, ?defaultSelected, ?selected);参数text和value分别设置Option对象的text和value;后两个参数,分别设置option的defaultSelected和selected属性,4个参数均为可选;其会返回一个<option>元素;
var newOption = new Option("上海", "shanghai");
selectbox.appendChild(newOption);
newOption = new Option("四川","sichuan",true,true);
selectbox.appendChild(newOption);
newOption = new Option();
newOption.text = "贵州";
newOption.value = "guizhou";
newOption.label = "美丽贵州";
newOption.selected = true;
selectbox.appendChild(newOption);
IE7以下不可用,因为它不能正确设置新选项的text属性;
第三种:使用选择框的add()方法:
语法:select.add(option[, before);其接受两个参数:要添加的新选项option和将位于新选项之后的选项before;before即可以是一个option也可以是选项的索引;before为可选,如果要在列表的最后添加选项,应该将第二个参数设置为null、undefined或者不设;如:
var newOption = new Option("上海", "shanghai");
selectbox.add(newOption, selectbox.options[1]); // 第2个位置
selectbox.add(newOption, 1); // 第2个位置
selectbox.add(newOption, null); // 最后位置
selectbox.add(newOption, undefined); // 最后位置
selectbox.add(newOption, 100); // 最后位置
selectbox.add(newOption); // 最后位置
如果将新选项添加到任意位置,使用DOM技术和insertBefore()方法也可以;
第四种,使用options属性也可以把新的option添加到选择框中,或者使用表单索引,如:
var newOption = new Option("上海", "shanghai");
selectbox.options[selectbox.options.length] = newOption; // 或者
selectbox[selectbox.options.length] = newOption;
// 如,添加多个
var arrOptions = ['重庆','云南','广西'];
arrOptions.forEach(function(v,i){
selectbox[selectbox.options.length] = new Option(v);
});
// 或
arrOptions = [
{text: "重庆", value: "chongqing"},
{text: "云南", value: "yunnan"},
{text: "广西", value: "guangxi"}
];
arrOptions.forEach(function(v,i){
selectbox[selectbox.options.length] = new Option(v.text, v.value);
});
移除选项:
移除选项也有多种方式:首先可以使用DOM的removeChild()方法,为其传入要移除的选项;其次可以使用选择框的remove()方法,为其传入要移除选项的索引;最后,可以将相应选项设置为null;
selectbox.removeChild(selectbox.options[1]);
selectbox.remove(2);
selectbox.options[2]=null;
// 如果不带参数,会删除selectbox本身
selectbox.remove();
移除选择框中所有的项,可以迭代所有选项并逐个移除:
function clearSelectbox(selectbox){
for(var i=0,len=selectbox.options.length; i<len; i++){
selectbox.remove(0);
}
}
clearSelectbox(selectbox);
使用options属性也可以移除全部或某个选项,
selectbox.options[1] = null; // 移除第2个
selectbox.options.length = 2; // 截断,只保留2个
// selectbox.options.length = 0; // 移除所有
selectbox.length = 0; // 移除所有
移动选项:
将一个选择框中的选项移动到另一个选择框中,使用DOM的appendChild()方法,因为使用appendChild()方法并传入一个已存在的元素,那么就会先从该元素的父节点中移除它,再把它添加到新的指定的位置;
var selectbox1 = document.getElementById("selLocation1");
var selectbox2 = document.getElementById("selLocation2");
selectbox2.appendChild(selectbox1.options[1]);
移动和移除选项有一个共同之外,即会重置每一个选项的index属性;
<h3>移动选项</h3>
<select name="sel1" id="sel1" size="8" multiple>
<option value="">唐</option>
<option value="">宋</option>
<option value="">元</option>
<option value="">明</option>
<option value="">清</option>
</select>
<button id="toRight">>></button>
<button id="toLeft"><<</button>
<select name="sel2" id="sel2" size="8" multiple>
<option value="">秦</option>
<option value="">汉</option>
<option value="">三国</option>
<option value="">两晋</option>
<option value="">南北朝</option>
</select>
<script>
var sel1 = document.getElementById("sel1");
var sel2 = document.getElementById("sel2");
var toRight = document.getElementById("toRight");
var toLeft = document.getElementById("toLeft");
toRight.onclick = function(){
var options = sel1.selectedOptions;
for(var i=options.length-1; i>=0; i--){
sel2.appendChild(options[i]);
}
};
toLeft.onclick = function(){
var options = sel2.selectedOptions;
for(var i=options.length-1; i>=0; i--){
sel1.appendChild(options[i]);
}
}
</script>
重排选项:
重排选项的次序,最好的方式也是DOM方法,如appendChild()适合将选项添加到选择框的最后,insertBefore()可以将选项移动到指定位置,如:
var optionToMove = selectbox.options[1];
// 向上移一下
selectbox.insertBefore(optionToMove,selectbox.options[optionToMove.index - 1]);
// 向下移一下
selectbox.insertBefore(optionToMove,selectbox.options[optionToMove.index + 2]);
select的事件:
选择框的change事件与其他表单控件的change事件触发的条件不一样,其他控件的change事件是在值被修改且焦点离开时触发,而选择框的change事件只要选中了选项就会触发;
选择不同的选项时,也会触发input事件,如:
selectbox.addEventListener("change", function(event){
console.log(event.target.selectedIndex);
});
function inputHandler(e){
console.log(e.target.value);
}
selectbox.addEventListener("input", inputHandler);
示例:跳转
<select id="links">
<option value="https://www.zeronetwork.cn">零点网络</option>
<option value="https://cn.bing.com">Bing</option>
<option value="https://www.apple.com">苹果</option>
</select>
<script>
var links = document.getElementById("links");
links.addEventListener("change", function(event){
location.href = event.target.options[event.target.selectedIndex].value;
});
</script>
表单序列化:
随着Ajax的出现,表单序列化已经成为一种常见需求;在Javascript中,可以利用表单元素的type属性,连同name和value属性一起实现对表单的序列化;
浏览器把数据发送给服务器原理:
如:表单简单序列化;
var btn = document.getElementById("btn");
btn.addEventListener("click", submitHandler, false);
function submitHandler(event){
var myForm = document.forms[0];
var username = myForm.elements["username"].value;
var userpwd = myForm.elements["userpwd"].value;
var sex = myForm.elements["sex"].value;
var courseValue = [];
var courseList = myForm.elements["course"];
for(var i=0, len=courseList.length; i<len; i++){
if(courseList[i].checked)
courseValue.push(courseList[i].value);
}
var params = "username=" + username +
"&userpwd=" + userpwd +
"&sex=" + sex +
"&course=" + courseValue;
console.log(params);
}
如:通用序列化:
function serialize(form){
// 后面要用到的变量
var params = new Array();
var field = null,
i, j, len,
optLen,
option,
chkObj = {};
for(i=0, len=form.elements.length; i<len; i++){
field = form.elements[i];
switch(field.type){
// 如果是select,包含单选和多选
case "select-one":
case "select-multiple":
arrOpt = [];
for(j=0, optLen=field.options.length; j<optLen; j++){
option = field.options[j];
if(option.selected){
arrOpt.push(encodeURIComponent(option.value));
}
}
arrOpt = arrOpt.join(",");
params.push(encodeURIComponent(field.name) + "=" + arrOpt);
break;
// 如果是fieldset、file、submit、reset、button不提交
case undefined: //字段集
case "file": //文件域
case "submit": //提交
case "reset": //重置
case "button": //按钮
break;
// 如果是单选或复选框
case "radio":
case "checkbox":
if(field.checked){
if(chkObj[field.name])
chkObj[field.name].push(encodeURIComponent(field.value));
else
chkObj[field.name] = [encodeURIComponent(field.value)];
}
break;
default:
// 如果没有名字的表单元素,不提交
if(field.name.length)
params.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
}
}
for(var o in chkObj){
params.push(encodeURIComponent(o) + "=" + chkObj[o].join(","));
}
return params.join("&");
}
// 应用
var btn = document.getElementById("btn");
btn.addEventListener("click", submitHandler, false);
function submitHandler(event){
var myForm = document.forms[0];
var params = serialize(myForm);
console.log(params);
}
无刷新提交(局部刷新):
<script>
function saveUserInfo(){
var msg = document.getElementById("msg");
var form = document.forms[0];
// 提交地址
var url = "./demo.php";
// POST的值,把每个变量都通过&来联接
var postStr = serialize(form);
// XmlHTTP
var XmlHTTP;
if(window.XMLHttpRequest) {
XmlHTTP = new XMLHttpRequest();
}else if(window.ActiveXObject) {
XmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
}
XmlHTTP.open("POST", url, true);
//定义传输的文件HTTP头信息
XmlHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
XmlHTTP.send(postStr); //发送POST数据
//获取执行状态
XmlHTTP.onreadystatechange = function() {
//如果执行状态成功,那么就把返回信息写到指定的层里
if (XmlHTTP.readyState == 4 && XmlHTTP.status == 200) {
msg.innerHTML = XmlHTTP.responseText;
}
}
}
</script>
<div id="msg"></div>
<form name="userinfo" method="post" action="">
姓名:<input type="text" id="username"name="username" /><br />
年龄:<input type="text" name="age" /><br />
性别:<input type="text" name="sex" /><br />
<input type="button" value="提交表单" onClick="saveUserInfo()">
</form>
demo.php:
<?php
$username = $_POST['username'];
$age = $_POST['age'];
$sex = $_POST['sex'];
echo "$username <br>";
echo "$userage <br>";
echo "$usersex <br>";
// 链接数据库,并保存到数据库,$result为执行结果
$result = true;
if ($result){
echo "提交成功!";
}
else {
echo "提交失败!";
}
?>
整合:saveUserInfo()中换成:
// 提交地址
var url = "./demo.php";
// POST的值,把每个变量都通过&来联接
var postStr = serialize(form);
submitHandler()事件处理函数:
*请认真填写需求信息,我们会在24小时内与您取得联系。