JS(六)简单练习

一、省市级二级联动

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>省市级二级联动</title>
	</head>
	<body>
		<!--onchange 监听下拉框内容改变的事件-->
		<select id="province" onchange="show()">
			<option >--省份--</option>
			<option value="">陕西</option>
			<option value="">河南</option>
			<option value="">山西</option>
		</select>
		<select id="city">
			<option value="">--城市--</option>
		</select>
	</body>
	<script type="text/javascript">
	
		//需求:根据用户选择的省份,去动态生成该省对应的城市
		//即:省份的变化,对应的城市也发生变化
		
		//1、你得知道用户选的是哪个省
		var provice=document.getElementById("province");
		//2、定位到对应的市集合
		var mycity = document.getElementById("city");
		var city = [
			[],["西安", "咸阳", "宝鸡", "汉中", "渭南", "安康", "商洛", "铜川"],["南阳","安阳","信阳","洛阳","商丘"],
			["运城", "太原", "晋城", "长治"]
		];
		//3、动态的添加标签
		function show() {
			//(1)首先清空select中原来的城市(遗留问题)
			mycity.innerHTML = "<option>--城市--</option>"; //方式1
			//(2)每一个下拉框都有一个对应的编号,selectedIndex属性设置或返回下拉列表中被选项目的索引号(从0开始) 
			var index = provice.selectedIndex;
			//(3)通过索引遍历二维数组中的一维数组--定位到当前选择的省份
			var citys = city[index];
			//(4)将该省份对应的城市动态的增加到selest中(通过innerHTML的形式)
			for(var i = 0; i < citys.length; i++) {
                //这里没有采用循环创建标签的形式,太麻烦
				mycity.innerHTML += "<option>" + citys[i] + "</option>";
			}

		}
	</script>
</html>

问题:二级联动无非是建立关系,那么如何建立关系呢?下拉框的省份发生变化时,城市是如何知道的,从而显示相应的内容。

说明:onchange时刻检测自身内容是否发生变化,如果发生变化,则触发相应 的函数,通知城市下拉框去显示对应的内容。而城市下拉框则在需要的前提下,动态的显示相应的内容。

二、简单的计算器

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>简单的计算器</title>

		<!--第二步构建样式-->
		<style type="text/css">
			/*0:设计表单中表框的样式*/
			
			input {
				width: 296px;
				/*主要是为了跟数字的边框一样高*/
				height: 50px;
				font-size: 30px;
			}
			/*(1)行样式的设计--居中*/
			
			tr {
				text-align: center;
			}
			/*(2)列样式的设计--居中(五行四列)*/
			
			td {
				width: 75px;
				height: 100px;
			}
			/*(3)鼠标悬浮时,对应数字的背景发生变化*/
			
			td:hover {
				background: greenyellow;
			}
			
			.num:hover {
				background: yellow;
			}
			
			.operator:hover {
				background: blue;
			}
			
			#result:hover {
				background: pink;
			}
		</style>

		<script type="text/javascript">
			window.onload = function() {

				//(1)先获取计算机键盘中的各个键的对象
				var show = document.getElementById("show"); //表框的显示
				var result = document.getElementById("result"); //=号的运算符
				var del = document.getElementById("del"); //退格键
				var clean = document.getElementById("clean"); //清除键,恢复到初始化的
				var nums = document.getElementsByClassName("num"); //数字键
				var operations = document.getElementsByClassName("operator"); //操作符(四则)

				//(2)初始化:定义三个变量,用来保存 第一个数字、第二个数字、运算符
				var value1 = ""; //获取当前输入的数字
				var value2 = ""; //保存上一次运算的结果
				var oper = ""; //保存运算过程中的运算符

				//(3)数字键:获取数字,并设置点击,显示在显示框中
				for (var i = 0; i < nums.length; i++) {

					//用户点击数字时,会触发该数字对应的标签
					//小数点可能出现的问题:一个数字中出现多个小数点,同时小数点是第一位应自动补0
					nums[i].onclick = function() {
						//判断当前的运算符是啥
						if (this.innerHTML == ".") {
							//判断个数
							if (value1.indexOf(".") == -1) {
								//表示当前数字没有小数点,则接受
								value1 += this.innerHTML; //待显示的数据(连续输入多个数字)
								show.value = value1; //显示在表框中
							} else {
								//表示已经有一个了,则不追加到数字上(不管,只显示)
								show.value = value1;
							}
						} else { //表示当前的是数字是不是0
							if (this.innerHTML == 0) {
								//当前点击的是0,要看首字母是不是0(以免开头连零)
								if (value1.indexOf("0") == 0) {
									show.value = value1; //显示在表框中
								} else {
									value1 += this.innerHTML; //待显示的数据(连续输入多个数字)
									show.value = value1; //显示在表框中
								}
							} else {
								value1 += this.innerHTML; //待显示的数据(连续输入多个数字)
								show.value = value1; //显示在表框中
							}
						}

					}
				}

				//(4)运算符
				for (var i = 0; i < operations.length; i++) {
					//用户点击操作符会触发,等待下一个数字的到来进行运算
					operations[i].onclick = function() {

						//用户一旦进行四则运算(value2就已经不为空了)---当再次出现运算符时,需要计算并显示当前的计算值()
						if (value2 != "") {
							if (value1 != "") {
								resultFunction(); //进行计算了(得到的value2就是计算结果)
							}
							oper = this.innerHTML; //保存运算符
						} else { //非四则的情况--看数字符号是不是
							if (value1.indexOf(".") == 0) {
								value1 = value1 + 0;
								show.value = value1; //显示数据(补0)
							}
							//show.value = value1; //显示数据(保持不变--可能是上一次的运算结果)
							value2 = value1; //保存运算符前面的计算结果(数字--尚未计算)
							value1 = ""; //清空,准备接受下一个数据
							oper = this.innerHTML; //保存运算符
						}
					}
				}
				//(5)=号操作符
				result.onclick = function() {
					//用户一旦点击=运算符,开始进行计算
					resultFunction(); //抽取一个函数
				}

				function resultFunction() {
					//由于是字符串,需要将字符串转化为数字
					var one = Number(value2); //实际第一次输入的数据(或上次的计算结果)
					var two = Number(value1); //运算符右面的结果
					var temp = 0; //运算结果的保存
					//根据数字中间的运算符,做相应的计算
					switch (oper) {
						case "+":
							temp = one + two;
							break;
						case "-":
							temp = one - two;
							break;
						case "*":
							temp = one * two;
							break;
						case "/":
							if (two != 0) {
								temp = one / two;
							} else {
								alert("除数不能为0");
								//恢复到初始状态
								temp = 0; //要显示的值
							}
							break;
						case "%":
							temp = one % two;
							break;
					}
					show.value = temp.toFixed(4) * 1; //显示数据(保留四位有效数字)
					//为了方便四则运算,需要做下面的改进
					//我们可以理解为一旦进行"一次运算"相当于输入第一个完整的数字就可以了
					oper = ""; //运算符清空,等待输入第二个数据
					value1 = ""; //清空数据,等待输入第二个数据
					value2 = temp; //保存运算结果(相当于输入一个数字后,将要输入运算符的状态)

				}

				//(6)给清除键设置点击事件---还原到初始默认状态
				clean.onclick = function() {
						value1 = "";
						value2 = "";
						oper = "";
						show.value = "0"; //默认显示为0
					}
					//(7)退格键---退到什么程度(最终可以恢复到初始状态)
				del.onclick = function() {
					if (value1 == "" && value2 != "") {
						//表示是等号获得的结果--直接清除
						value2 = "";
						oper = "";
						show.value = "0";
					} else {
						//不是等号的运算的结果
						if (value1.length > 0) {
							value1 = value1.substring(0, value1.length - 1); //剔除最后一位
							if (value1 == "") {
								show.value = "0"; //默认显示为0
								oper = "";
								value2 = "";
							} else {
								show.value = value1; //显示退格后的数字
							}
						}
					}		
				}

			}
		</script>
	</head>

	<body>
		<!--第一步:构建骨架(标签属性设置的说明)-->
		<center>
			<input type="text" value="0" disabled="disabled" id="show" />
			<table width="300px" height="500px" border="1" align="center" cellspacing="0">
				<tr>
					<td id="clean">C</td>
					<td id="del">DEL</td>
					<td class="operator">%</td>
					<td class="operator">/</td>
				</tr>
				<tr>
					<td class="num">7</td>
					<td class="num">8</td>
					<td class="num">9</td>
					<td class="operator">*</td>
				</tr>
				<tr>
					<td class="num">4</td>
					<td class="num">5</td>
					<td class="num">6</td>
					<td class="operator">-</td>
				</tr>
				<tr>
					<td class="num">1</td>
					<td class="num">2</td>
					<td class="num">3</td>
					<td class="operator">+</td>
				</tr>
				<tr>
					<td colspan="2" class="num">0</td>
					<td class="num">.</td>
					<td id="result">=</td>
				</tr>
			</table>
		</center>
	</body>

</html>

相关链接:点击打开链接点击打开链接点击打开链接

猜你喜欢

转载自blog.csdn.net/wzj_110/article/details/80355304