JS(5)事件的使用

版权声明: https://blog.csdn.net/aic1999/article/details/82845377

事件

为什么要使用事件?

平时我们都会遇到各种来自用户操作的事件,比如鼠标事件、表单事件、进度事件、突变事件(DOM节点改变)等等。我认为事件的提出就是为了规范这类行为的。

假如我们要实现这个功能:点击超链接,弹出两个弹框。于是有下面的代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>事件</title>
<script type="text/javascript">
	function click1(){
		alert("You Click?");
		return false;	
	}
	function click2(){
		alert("Are you sure?");
		return false;
	}
</script>
</head>
<body>
	<a href="test.html" id="linka">Click Me</a>
    <script type="text/javascript">
		document.getElementById("linka").onclick=click1;
		document.getElementById("linka").onclick=click2; 
	</script>   
</body>
</html>

但是我们会发现一个问题——只能弹出第二个弹窗.....

所以为了避免触发交互事件的诸多bug,最好的方式就是使用人家已经规定好的规范,走野路子bug多....调试调到心态爆炸。所以我们可以尝试使用事务做这个效果。

例题

点击超链接,弹出两个弹框

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>事件</title>
<script type="text/javascript">
	function click1(){
		alert("You Click?");
		return false;	
	}
	function click2(){
		alert("Are you sure?");
		//标准事件模型——阻止默认操作。不改的话就会默认不跳。
		e.preventDefault();
	}
</script>
</head>
<body>
	<a href="test.html" id="linka">Click Me</a>
    <script type="text/javascript">
		//添加事件监听器
		var linka=document.getElementById("linka");
		linka.addEventListener("click",click1); //(没有On的事件名,函数名)
		linka.addEventListener("click",click2);		
	</script>   
</body>
</html>

应用案例

用户注册时,如果用户名为空则提示用户并强制用户写用户名。

提交时需要判断以下所有成立:判断密码不为空,判断密码长度8-20,两次密码一致。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户名输入失去焦点时提示</title>
</head>
<body>
<!--div表示自成一行,所以用span提醒更好。from现在不推荐用了,一般用css -->
	姓名:<input id="uname"><span id="prompt1"></span><br>
 	密码:<input id="ps1" type="password"><br>
	确认密码:<input  id="ps2" type="password"><br>
	<input type="submit" onclick="checkPsw()" value="Register">
	<script type="text/javascript">
		function checkName(){
			if(uname.value==""){
				//alert("用户名不可为空"); 死循环提示,缺点是一直失去焦点。但是IE内核版本低的不会一直失去焦点。
				document.getElementById("prompt1")	//提示用户
					.innerHTML="<font color='red'>用户名不能为空</font>";			 
				uname.focus();	//强制获取焦点
			}		
		}
		function checkPsw(){	
			var le=psw.value.length;
			if(psw.value==""||le<8||le>20){
				alert("请正确填写密码!长度为8~20!");
				psw.focus();
			}else if((psw2.value)!=(psw.value)){
				alert("两次密码要一致");
				psw.focus();
			}
		}
 		var uname=document.getElementById("uname");
		uname.addEventListener("blur",checkName);	//onblur()焦点事件
		var psw=document.getElementById("ps1");
		var psw2=document.getElementById("ps2");
	</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/aic1999/article/details/82845377