JavaScript--基于对象的脚本语言学习笔记(三)

事件处理器

1、一个数据校验表单的例程

<html>
	<head>
		<title>js练习</title>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
		<script type="text/javascript">
			String.prototype.trim=function(){
			  return this.replace(/^s*/,"").replace(/s*$/,"");
			}
			//处理表单submit事件的函数
			var check=function(){
				var form=document.forms[0];
				var errStr="";
				if(form.user.value==null||form.user.value.trim()==""){
					errStr+="
username不能为空!"
					form.user.focus();
				}
				if(form.pass.value==null||form.pass.value.trim()==""){
					errStr+="
密码不能为空!"
					form.pass.focus();
				}
				
				if(form.email.value==null||form.email.value.trim()==""){
					errStr+="
邮件不能为空!"
					form.email.focus();
				}
				if(!/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/.test(form.email.value.trim())){
					errStr+="
邮件格式不正确!!"
					form.email.focus();				
			    }
				
				if(errStr!=""){
					alert(errStr);
					return false;
				}else{
					alert("验证成功!");
				}
			};
		</script>
	</head>


	<body id="body">		
		<div>
		<h2>数据校验表单</h2>
		<form id="register" name="register" method="post" onsubmit="return check(this);" action="#">
		username:<input type="text" name="user"/><br/>
		密 码:<input type="password" name="pass"/><br/>
		电 邮:<input type="text" name="email"/><br/>
		<input type="submit" value="提交"/><br/><hr/>
		</form>
		</div>
	</body>
</html>
//也能够通过绑定DOM对象属性来设置事件处理函数。仅仅要在js脚本最后加入一行:document.forms[0].onsubmit=check;
2、当为HTML元素的onclick等属性指定一系列JavaScript脚本时,假设在这些js脚本中使用this,则该keyword引用该HTML元素本身 当为DOM对象的onclick属性指定一个JavaScript函数引用时,假设在函数中使用this,该this也是引用该DOM对象本身
3、DOM提供了一种事件绑定机制:addEventListener()
   语法为:objectTarget.addEventListener("eventType",handler,captureFlag)
   与addEventListener()方法相相应,DOM也提供了一个方法用于删除事件处理器:removeEventListener()
   语法为:objectTarget.removeEventListener("eventType",handler,captureFlag)
   在DOM事件模型中当浏览器检測到发生了某个事件时,将自己主动创建一个Event对象,并隐式地将该对象作为事件处理函数的第一个參数传入
4、一个DOM转发事件例程(非IE)
<html>
	<head>
		<title>js练习</title>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
	</head>
	<body id="body">		
		<input type="button" id="bt1" value="button1"/>
		<input type="button" id="bt2" value="button2"/>
		<div id="show"></div>
		<script type="text/javascript">
			//第一个button被单击时的事件处理函数
			var rd=function(evt){
				document.getElementById("show").innerHTML+='事件冒泡阶段:'+evt.currentTarget.value+"被击中了<br/>";
				//创建一个普通事件
				var e=document.createEvent("Events");
				//初始化事件对象,指定该事件支持冒泡,不同意取消默认行为
				e.initEvent("click",true,false);
				//将事件转发到bt2
				document.getElementById("bt2").dispatchEvent(e);
			}


			//定义第二个button被单击时的事件处理函数
			var goClick=function(evt){
				document.getElementById("show").innerHTML+='事件冒泡阶段:'+evt.currentTarget.value+"<br/>";
			}
			//分别为两个button绑定事件处理函数
			document.getElementById("bt1").addEventListener("click",rd,false);
			document.getElementById("bt2").addEventListener("click",goClick,false);
		</script>
	</body>
</html>


5、取消事件的默认行为
   DOM也提供了取消事件默认行为的方法,DOM中的事件对象都提供了preventDefault()方法,该方法不须要參数,仅仅要运行了给定事件的      preventDefault方法,该事件的默认行为将失效。
	<body id="body">		
		友情链接:<br/>
		<a id="mylink" href="http://www.njue.edu.cn">財经大学</a>
		<script type="text/javascript">
			var killClicks=function(event){
				event.preventDefault();//这句话导致点击超链接不会跳转
				alert("超链接被单击");
			}
			document.getElementById("mylink").addEventListener("click",killClicks,true);			
		</script>
	</body>
  //上面的代码尽管使用preventDefault方法取消了事件的默认行为,可是并未阻止处理函数的运行,也不会影响事件的传播
  //以下的代码为超链接和document在事件传播阶段绑定了事件处理函数,将会得到运行
 	<body id="body">		
		友情链接:<br/>
		<a id="mylink" name="我的超链接" href="http://www.njue.edu.cn">財经大学</a>
		<div id="show"></div>
		<script type="text/javascript">
			var killClicks=function(event){
				event.preventDefault();//这句话导致点击超链接不会跳转
				alert("超链接被单击");
				document.getElementById("show").innerHTML+="事件捕获阶段:"+event.currentTarget+"<br/>";
			}
			document.getElementById("mylink").addEventListener("click",killClicks,true);	
			document.addEventListener("click",killClicks,true);//为document绑定事件处理函数
		</script>
	</body>

原文地址:https://www.cnblogs.com/mfrbuaa/p/4186023.html