首页 > 代码库 > 深入理解表单脚本系列第四篇——选择框脚本
深入理解表单脚本系列第四篇——选择框脚本
目录
[1]select [2]option [3]添加选项[4]移除选项前面的话
选择框是通过<select>和<option>元素创建的,又称为下拉列表框。为了方便与这个控件交互,除了所有表单字段共有的属性和方法外,javascript还提供了一些属性和方法。本文将详细介绍选择框脚本
<select>
首先介绍关于<select>元素的相关属性
multiple
multiple属性表示是否允许多项选择
<select name="test" id="test"> <option>1</option> <option>2</option> <option>3</option></select><button id="btn">是否多选</button><script>btn.onclick = function(){ test.multiple = !test.multiple;} </script>
<iframe style="width: 100%; height: 100px;" src="http://sandbox.runjs.cn/show/8fezr8oe" frameborder="0" width="320" height="240"></iframe>
type
选择框的type属性有两种,一种是‘select-one‘,表示单选;另一种是‘select-multiple‘,表示多选
<select name="test" id="test"> <option>1</option> <option>2</option> <option>3</option></select><button id="btn">是否多选</button><div id="result"></div><script>btn.onclick = function(){ test.multiple = !test.multiple; result.innerHTML = test.type;} </script>
<iframe style="width: 100%; height: 100px;" src="http://sandbox.runjs.cn/show/ixw900hw" frameborder="0" width="320" height="240"></iframe>
value
选择框的value属性由当前选中项决定
1、如果没有选中的项,则选择框的value属性保存空字符串
2、如果有一个选中项,而且该项的value特性已经在HTML中指定,则选择框的value属性等于选中项的value特性。即使value特性的值是空字符串,也同样遵循此条规则
3、如果有一个选中项,但该项的value特性在HTML中未指定,则选择框的value属性等于该项的文本
4、如果有多个选中项,则选择框的value属性将依据前两条规则取得第一个选中项的值
[注意]IE8-浏览器只支持value属性的值,不支持选择的文本值
<select name="test" id="test"> <option value="a">1</option> <option value="b">2</option> <option>3</option></select><button id="btn1">是否多选</button><button id="btn2">获取value值</button><div id="result"></div><script>btn1.onclick = function(){ test.multiple = !test.multiple;} btn2.onclick = function(){ result.innerHTML = test.value;}</script>
<iframe style="width: 100%; height: 100px;" src="http://sandbox.runjs.cn/show/1mbercqb" frameborder="0" width="320" height="240"></iframe>
selectedIndex
selectedIndex属性返回基于0的选中项的索引,如果没有选中项,则值为-1。对于支持多选的控件,只保存选中项中第一项的索引
<select name="test" id="test"> <option value="a">1</option> <option value="b">2</option> <option>3</option></select><button id="btn1">是否多选</button><button id="btn2">获取索引</button><div id="result"></div><script>btn1.onclick = function(){ test.multiple = !test.multiple;} btn2.onclick = function(){ result.innerHTML = test.selectedIndex;}</script>
<iframe style="width: 100%; height: 100px;" src="http://sandbox.runjs.cn/show/7ipqkgas" frameborder="0" width="320" height="240"></iframe>
size
size属性表示选择框的可见行数
<select name="test" id="test"> <option value="a">1</option> <option value="b">2</option> <option>3</option></select><button id="btn1">可见1行</button><button id="btn2">可见2行</button><button id="btn3">可见3行</button><div id="result"></div><script>btn1.onclick = function(){ test.size = 1;} btn2.onclick = function(){ test.size = 2;}btn3.onclick = function(){ test.size = 3;}</script>
<iframe style="width: 100%; height: 100px;" src="http://sandbox.runjs.cn/show/6oshcfut" frameborder="0" width="320" height="240"></iframe>
options
options属性表示控件中所有的<option>元素
<select name="test" id="test"> <option value="a">1</option> <option value="b">2</option> <option>3</option></select><script>//[option, option, option, selectedIndex: 0]console.log(test.options)</script>
<option>
在DOM中,每个<option>元素都有一个HTMLOptionElement对象表示。为便于访问数据, HTMLOptionElement对象也定义了一些属性
[注意]IE浏览器不支持为<option>元素设置display:none
index
index属性表示当前选项在options集合中的索引
label
label属性表示当前选项的标签
[注意]IE9-浏览器不支持
selected
selected属性表示当前选项是否被选中。将这个属性设置为true可以选中当前选项
text
text属性表示选项的文本
value
value属性表示选项的值
[注意]在未指定value特性的情况下,IE8会返回空字符串;而其他浏览器返回text属性的值
<select name="test" id="test"> <option value="a" selected>1</option> <option value="b">2</option> <option>3</option></select><script>var option = test.options[0];console.log(option.index);//0console.log(option.label);//1,IE9-浏览器返回空字符串‘‘console.log(option.selected);//trueconsole.log(option.text);//1console.log(option.value);//a</script>
添加选项
【1】添加选项可以使用DOM的appendChild()或insertBefore()方法
<select name="test" id="test"> <option>1</option> <option>3</option></select><button id="btn">增加选项2</button><script>btn.onclick = function(){ var newOption = document.createElement(‘option‘); newOption.innerHTML = 2; test.insertBefore(newOption,test.options[1]);}</script>
<iframe style="width: 100%; height: 50px;" src="http://sandbox.runjs.cn/show/jv1wnvrp" frameborder="0" width="320" height="240"></iframe>
【2】可以使用选择框的add()方法,add(newoption,reloption)方法向控件中插入新<option>元素,其位置在相关项(reloption)之前
使用Option构造函数来创建新选项,接受两个参数:文本(text)和值(value),第二个参数可选
<select name="test" id="test"> <option>1</option> <option>3</option></select><button id="btn">增加选项2</button><script>btn.onclick = function(){ var newOption = new Option(‘2‘); test.add(newOption,1);}</script>
<iframe style="width: 100%; height: 50px;" src="http://sandbox.runjs.cn/show/xf1rkbcp" frameborder="0" width="320" height="240"></iframe>
移除选项
与添加选项类似,移除选项的方式也有很多种
【1】使用DOM的removeChild()方法
<select name="test" id="test"> <option>1</option> <option>2</option> <option>3</option></select><button id="btn">移除选项2</button><script>btn.onclick = function(){ test.removeChild(test.options[1]);}</script>
<iframe style="width: 100%; height: 50px;" src="http://sandbox.runjs.cn/show/hlomokpg" frameborder="0" width="320" height="240"></iframe>
【2】使用选择框的remove()方法。这个方法接受一个参数,即要移除选项的索引
[注意]使用该方法的好处是,若不存在被移除选项的索引,不会报错,只是静默失败
<select name="test" id="test"> <option>1</option> <option>2</option> <option>3</option></select><button id="btn">移除选项2</button><script>btn.onclick = function(){ test.remove(1);}</script>
<iframe style="width: 100%; height: 50px;" src="http://sandbox.runjs.cn/show/gzbargjn" frameborder="0" width="320" height="240"></iframe>
【3】将相应选项设置为null
[注意]该方法同样不会报错
<select name="test" id="test"> <option>1</option> <option>2</option> <option>3</option></select><button id="btn">移除选项2</button><script>btn.onclick = function(){ test.options[1] = null;}</script>
<iframe style="width: 100%; height: 50px;" src="http://sandbox.runjs.cn/show/5bcdgyto" frameborder="0" width="320" height="240"></iframe>
<script type="text/javascript">// 0){ return; } if(select[i].getBoundingClientRect().top <= 0 && select[i+1]){ if(select[i+1].getBoundingClientRect().top > 0){ change(oCon.children[i+2]) } }else{ change(oCon.children[select.length+1]) } }}document.body.onmousewheel = wheel;document.body.addEventListener(‘DOMMouseScroll‘,wheel,false);var oCon = document.getElementById("content");var close = oCon.getElementsByTagName(‘span‘)[0];close.onclick = function(){ if(this.innerHTML == ‘显示目录‘){ this.innerHTML = ‘ב; this.style.background = ‘‘; oCon.style.border = ‘2px solid #ccc‘; oCon.style.width = ‘‘; oCon.style.height = ‘‘; oCon.style.overflow = ‘‘; oCon.style.lineHeight = ‘30px‘; }else{ this.innerHTML = ‘显示目录‘; this.style.background = ‘#3399ff‘; oCon.style.border = ‘none‘; oCon.style.width = ‘60px‘; oCon.style.height = ‘30px‘; oCon.style.overflow = ‘hidden‘; oCon.style.lineHeight = ‘‘; }}for(var i = 2; i < oCon.children.length; i++){ oCon.children[i].onmouseover = function(){ this.style.color = ‘#3399ff‘; } oCon.children[i].onmouseout = function(){ this.style.color = ‘inherit‘; if(this.mark){ this.style.color = ‘#3399ff‘; } } oCon.children[i].onclick = function(){ change(this); } }function change(_this){ for(var i = 2; i < oCon.children.length; i++){ oCon.children[i].mark = false; oCon.children[i].style.color = ‘inherit‘; oCon.children[i].style.textDecoration = ‘none‘; oCon.children[i].style.borderColor = ‘transparent‘; } _this.mark = true; _this.style.color = ‘#3399ff‘; _this.style.textDecoration = ‘underline‘; _this.style.borderColor = ‘#2175bc‘; }// ]]></script><script type="text/javascript" src="http://files.cnblogs.com/files/xiaohuochai/contextMenu.js"></script>深入理解表单脚本系列第四篇——选择框脚本