Javascript事件处理:利用DOM事件模型、鼠标、页面和表单相关事件,实现实验内容。

效果图:

实验要求:

1.用户名输入框不可为空且必须符合要求,否则出现红色提示。

2.密码不能为空且必须符合要求,否则出现红色提示。

3.确认密码不能为空且必须符合要求,否则出现红色提示。

4.创建性别和生日下拉列表框,并且生日下拉列表框必须有闰年和闰月的判断。

5.创建个人介绍文本框。

6.创建三级下拉列表框。

不符合要求的情况如下图:

用户名和密码为空时:

用户名、密码和确认密码不符合要求时: 

 

 代码部分:

HTML代码:

<style>
		span{color:red; font-weight: bold; display: none;}
		</style>
	</head>
	<body>
		<form name="form1">
			用&nbsp;&nbsp;户&nbsp;&nbsp;名*:<input type="text" id="username" name="username" class="regex"/>九位有效字符,前三个只能输入字母(不区分大小写),后六位只能输入数字!
			<span class="error">九位有效字符,前三个只能输入字母(不区分大小写),后六位只能输入数字!</span><br>
			密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:*<input type="password" id="pwd" name="pwd" class="regex"/>(8位有效数字)
			<span class="error"></span><br>
			确认密码*:<input type="password" id="c_pwd" name="c_pwd" class="regex" />
			<span class="error"></span><br>
			性别*:
			<select id="xingbie" size="1">
				<option value="0">男</option>
				<option value="1">女</option>
			</select><br>
			生日:<select id="year" name="birthYear"></select>年
		    <select id="month" name="birthMonth"></select>月
		    <select id="data" name="birthDate"></select>日<br>
			个人介绍:<br>
			<textarea wrap="physical" name="jieshao" cols="40" rows="11"></textarea><br>
			<input type="submit" id="sub" value="提交" onclick=fun()"/><input type="reset" value="重置" />
		</form>
		<form name="form3sel">
		    城市:
		    <select name="city" onchange="sel_school()">
		        <option value="0">选择城市...</option>//索引号0
		        <option value="北京">北京</option>//索引号1
		        <option value="天津">天津</option>//索引号2
		        <option value="上海">上海</option>//索引号3
		    </select>
		    学校:
		    <select name="school" onchange="sel_major()">
		        <option value="0">选择学校...</option>
		    </select>
		    专业:
		    <select name="major">
		        <option value="0">选择专业...</option>
		    </select>
		</form>
		<div id="show"></div>
	</body>

JS代码:

<script type="text/javascript" >
	window.onload=function(){
		var myTestBtn=document.getElementById("sub");//获取按钮对象
		var myTestRegex=document.getElementsByClassName("regex");//通过regex类名,获取需要进行验证的输入框对象数组
		var myError=document.getElementsByClassName("error");//通过error类名,获取验证出错需要对用户进行提示的数组对象
		for(i=0;i<myTestRegex.length;i++){//对每个验证对象进行循环
			myTestRegex[i].index=i;//给每个验证对象加索引值
			myTestRegex[i].onblur=function(){//给每个验证对象加失去焦点事件
				switch(this.index){
					case 0:var reg=/^[A-Za-z]{1,3}\d{4,9}$/;//定义用户名的正则表达式
					spaceError="用户名不能为空!";//用户名为空时的提示
					regError="九位有效字符,前三个只能输入字母(不区分大小写),后六位只能输入数字!";//用户验证错误时,给出的提示字符串
					testResult(this,reg,this.index,spaceError,regError)
					break;
					case 1:var reg=/^[0-9]{8}$/;//定义密码验证的的正则表达式
					spaceError="密码不能为空!";//密码为空时的提示
					regError="密码为8位有效数字";//密码验证错误时,给出的提示字符串
					testResult(this,reg,this.index,spaceError,regError)
					break;
					case 2:
					if(myTestRegex[2].value==""){
						myError[2].style.display="inline";//显示提示内容
						myError[2].innerHTML="确认密码不能为空!";
						myTestRegex[2].date=1;//验证数据为1时,验证没通过
					}
					//进行密码与确认密码是否相同的验证
					if(myTestRegex[1].value!=myTestRegex[2].value){
						myError[2].style.display="inline";//显示提示内容
						myError[2].innerHTML="密码与确认密码不相同!";
						myTestRegex[2].date=1;//验证数据为1时,验证没通过
					}
					else{
						myError[2].style.display="none";
					}
					break;
				} 
			}
		}
		//验证函数,实参为:1.当前验证对象2.正则表达式3.索引值4.输入值为空时,提示字符串5.验证错误,提示字符串
		function testResult(object,reg,index,spaceError,regError){
			var value=object.value;//获取用户输入的值
			var result=reg.test(value);//进行正则表达式的验证
			if(value==""){
				myError[index].style.display="inline";//为空时显示提示
				myError[index].innerHTML=spaceError;//定义提示内容
				object.date=1;//设置验证数据为1时,则验证没通过
			}
			else if(result){//不为空时,进行正则表达式的验证
				myError[index].style.display="none";//通过,隐藏错误提示
				object.date=0;//设置验证数据为0时,验证通过
			}
			else{//正则表达式没有通过
				myError[index].style.display="inline";//显示错误提示
				myError[index].innerHTML=regError;//设置错误提示内容
				object.date=1;//表示验证没有通过
			}
		}
		myTestBtn.onclick=function(){//单击提交按钮,进行所有输入数据的验证
			total=0;//验证错误计数器
			for(i=0;i<myTestRegex.length;i++){
				myTestRegex[i].onblur();//激活表单每一个失去焦点事件
				total+=myTestRegex[i].date;//累加错误计数器,都为0时表示验证通过
			}
			if(total>0)return false;//计数器大于0,表示有数据没有通过验证,不提交
			else return true;//否则验证通过,提交用户输入的数据
		}
	}
	//性别下拉列表
	var xingbie=document.getElementById("xingbie");
	xingbie.onchange=function(){
	var index=xingbie.selectedIndex;//将性别数组中的值填充到性别下拉列表框中
	}
	//这个函数是为了增加select下拉框中的项目
	var addoption = function(selectag,startData,endData,defaultData){
		selectag.options.length = 0;  //这是保证每次重新选择,页面重绘都会清除原来的option
		for(var i = startData; i < endData+1; i++){
			var option = document.createElement("option");
			option.value = i;
			option.innerText = i;
			if(i == defaultData){
				option.selected = "selected";
			}
			selectag.appendChild(option);
		}
	};
	//这个函数是为了动态获取日期
	function initBirthDate(birthDateSelect, year, month) {
	var today = new Date(year, month, 0);
	var lastDate = today.getDate();
	addoption(birthDateSelect, 1, lastDate, 1);
	};
	//下面是取得该节点,然后调用上面的方法
	var birthYear = document.getElementById('year');
	var birthMonth =  document.getElementById('month');
	var birthDate =  document.getElementById('data');
	addoption(birthYear, 1990, 2022, 1998);
	addoption(birthMonth, 1, 12, 1);
	initBirthDate(birthDate, 2000, 1);
	//以下两个函数是为了处理当option的值改变时,能正确的将选中的年和月传入
	//initBirthDate(),然后重新确定日期的范围
	year.onchange = function(event){
		var years = year.value;
		var months = month.value;
		initBirthDate(birthDate, years, months);
	};
	month.onchange = function(event) {
	var years = year.value;
	var months = month.value;
	initBirthDate(birthDate, years, months);
	};
	//三级下拉列表框
	var school=[
		["北京大学","清华大学","中国人民大学","北京邮电大学","北京航空航天大学","北京理工大学","中国传媒大学"],
		["天津大学","南开大学","天津医科大学","天津工业大学","天津理工大学","中国民航大学","天津师范大学"],
		["复旦大学","同济大学","上海交通大学","华东师范大学","上海大学","上海中医药大学","上海财经大学"]
	];
	var major=[
		[["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"]],
		[["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["临床医学","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"]],
		[["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"],["软件工程","网络工程","临床医学"]]
		];
	function sel_school() {
	    var selCity = document.form3sel.city;//  获得城市下拉选择框对象
	    var selschool = document.form3sel.school; //  获得学校下拉选择框对象
	    var selmajor = document.form3sel.major;// 获得专业下拉选择框对象
	    var arrcityschool = school[selCity.selectedIndex - 1];//  获得城市所对应的学校数组
	    selschool.length = 1;// 清空学校下拉列表框,仅保留第一个选项
	    selmajor.length = 1; //  清空专业下拉列表框,仅保留第一个选项
	    for (var i = 0; i < arrcityschool.length; i++) { //  将学校数组中的值填充到学校下拉列表框中
	        selschool[i + 1] = new Option(arrcityschool[i], arrcityschool[i]);
	    }
	}
	function sel_major() {
	    var selCity = document.form3sel.city;// 获得城市下拉选择框对象
	    var selschool = document.form3sel.school; //获得学校下拉选择框对象
	    var selmajor = document.form3sel.major; //获得专业下拉选择框对象
	    var arrcityschool = major[selCity.selectedIndex - 1][selCity.selectedIndex - 1]; //获得学校所对应的专业数组
	    selmajor.length = 1;//清空专业下拉列表框,仅保留第一个选项
	    for (var i = 0; i < arrcityschool.length; i++) {//将专业数组中的值填充到专业下拉列表框中
	        selmajor[i + 1] = new Option(arrcityschool[i], arrcityschool[i]);
	    }
	}
	</script>

重点知识:正则表达式全解析+常用实例

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个昵称我想了20分钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值