实际开发中大概总会碰到这样的需求:在注册页面上有两个下拉列表框,左侧省份的下拉列表框中的值一改变,右侧的市的下拉列表框中的值也要随之发生变化,也即省市联动。效果类似如下: 要使用JavaScript完成省市联动的效果,首先须知道以下知识点:
JavaScript中创建数组的语法; JavaScript中的onchange事件; 下拉列表框改变事件。欲完成省市联动的效果,必然需要有两个下拉框,然后监听一个下拉框的onchange事件,在值发生改变的时候,基于改变后的值去控制后面的下拉框的值。JavaScript中DOM的操作——创建元素和添加元素。知晓上面三个知识点之后,下面我就按照如下步骤使用JavaScript完成省市联动的效果:
创建一个HTML文件;确定事件:onchange事件;触发函数,在函数中编写代码;获得到所选择的省份的信息;根据选择的省份的信息获得到对应的数组中的市的数据;遍历数组中的市的信息;创建元素,创建文本,最后将元素添加到第二个列表中。我在【案例六:使用JS完成省市二级联动效果.html】页面中摘出代表省市的两个下拉列表框:
<tr> <td>籍贯</td> <td> <select id="province" name="province" onchange="changeCity(this.value)"> <option value="">-请选择-</option> <option value="0">浙江省</option> <option value="1">江苏省</option> <option value="2">湖北省</option> <option value="3">河北省</option> <option value="4">吉林省</option> </select> <select id="city" name="city"> <option>-请选择-</option> </select> </td> </tr>接着编写JavaScript代码完成省市联动的效果:
<script> function changeCity(value) { // 获得到选中的省份的信息 var city = document.getElementById("city"); /* // 清空第二个列表中的内容 for (var i = city.options.length; i > 0; i--) { city.options[i] = null; } */ // 清空第二个列表中内容的代码也可写成如下一行代码 city.options.length = 1; // alert(value); for (var i = 0; i < arrs.length; i++) { if (value == i) { // 获得所有的市的信息 for (var j = 0; j < arrs[i].length; j++) { // alert(arrs[i][j]); // 创建元素 var opEl = document.createElement("option"); // <option></option> // 创建文本节点 var textNode = document.createTextNode(arrs[i][j]); // 将文本的内容添加到option元素中 opEl.appendChild(textNode); // 将option元素添加到第二个列表中 city.appendChild(opEl); } } } } </script>读者如需查看源码,请参考前端简单入门第十四讲 使用JavaScript完成省市联动的效果!
JavaScript中的内置对象有: 下面我稍微叙述一下这些对象常用的方法。
Array Array对象的方法: Boolean Boolean对象的方法: Date Date对象的方法: 其中要注意getTime()这个方法,它在某些地方有奇效。Math Math对象的方法: String String对象的方法基本上类似于Java中String类的那些方法。String对象的方法有: 较常用的方法已用红框框出。JavaScript中的全局函数有: 了解一下以下全局函数:
parseInt() 解析一个字符串并返回一个整数。例如,parseInt("11");
parseFloat() 解析一个字符串并返回一个浮点数。例如,parseFloat("32.09");
解码
decodeURI()decodeURIComponent():可对一些特殊字符进行解码编码
encodeURI()encodeURIComponent():可对一些特殊字符进行编码eval 将一段内容当成是JavaScript的代码执行。例如:
var sss = "alert('aaaa')"; eval(sss);