JS(5)事件

事件

为什么要使用事件?

平时我们都会遇到各种来自用户操作的事件,比如鼠标事件、表单事件、进度事件、突变事件(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>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值