JavaScript 中的事件类型、三级联动

JavaScript 中的事件类型

1. 事件类型

(1)事件的定义

指的是文档或者浏览器窗口中发生的一些特定交互瞬间。我们可以通过侦听器(或者处理程序)来预定事件,以便事件发生的时候执行相应的代码。

事件类型

事件类型是一个用来说明发生什么类型事件的字符串。像鼠标悬浮,按下键盘等。我们也可以把事件类型叫做事件名字,用特定的名字来标识所谈论的特定类型的事件。

事件目标

事件目标是发生的事件或与之相关的对象。当讲事件时,我们必须同时指定类型和目标。像 window 上的 load 事件或者链接的 click 事件。在客户端 js 的应用程序中,Window、Document、和 Element 对象是最常见的事件目标,但是某些事件也是由其它类型的对象触发的。

事件处理程序或事件监听程序

我们用户在页面中进行的点击这个动作 ,鼠标移动的动作,网页页面加载完成的动作等,都可以称之为事件名称,即:click、mousemove、load 等都是事件的名称。响应某个事件的函数则称为事件处理程序,或者叫做事件侦听器。

事件对象

事件对象是与特定事件相关且包含有关该事件详细信息的对象。事件对象作为参数传递给事件处理程序函数。所有的事件对象都有用来指定事件类型的 type 属性和指定事件目标的 target 属性。每个事件类型都为其相关的事件对象定义一组属性。
事件传播:事件传播是浏览器决定那个对象触发其事件处理程序的过程

(2)事件模型

(1) 内联模型

在内联模型中,事件处理函数是 HTML 标签的一个属性,用于处理指定事件。

(2)脚本模型

由于内联模型违反了 HTML 与 JavaScript 代码层次分离的原则。为了解决这个问题,我们可以在 JavaScript 中处理事件。这种处理方式就是脚本模型。

(3)DOM2 模型

“DOM2 级事件”定义了两个方法,用于添加事件和删除事件处理程序的操作:
addEventListener()和 removeEventListener()。所有 DOM 节点中都包含这两个方法,并且它们都接受 3 个参数;事件名、函数、冒泡或捕获的布尔值(true 表示捕获,false 表示冒泡)。

(3)传统的事件类型

鼠标事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			window.function(){
				var arr=document.getElementsByTagName('div');
				for(var i=0;i<arr.length;i++){
					arr[i].style.width=200+'px';
					arr[i].style.height=200+'px';
//					随机函数 Math.random(): 随机范围是0-1之间的数字
					var color1=Math.random()*255;
					var color2=Math.random()*255;
					var color3=Math.random()*255;
					arr[i].style.background='rgb('+color1+','+color2+','+color3+')';
					if(i==0){
						arr[i].onmouseover=cir;
					}else if(i==1){
						arr[i].onmousedown=lin;
					}
				}
				//鼠标移入到第一个div上之后,改变为圆形
				function cir(){
					this.style.borderRadius=100+'px'
				}
				//鼠标点击第二个元素,这个元素渐变
				function lin(){
					this.style.background='linear-gradient(to right,yellow,green)';
				}
			}
		</script>
	</head>
	<body>
		<div class="div1"></div>
		<div class="div2"></div>
		<div class="div3"></div>
	</body>
</html>

键盘事件

         <script type="text/javascript">
//			onkeyup:键盘被松开
			document.onkeyup=function(){
				alert('键盘被松开触发的事件');
			}
//			onkeydown:键盘被按下
			document.onkeydown=function(){
				alert('键盘被按下时触发的事件');
			}
//			onkeypress:键盘被按下并松开
			document.onkeypress=function(){
				alert('键盘被按下并松开时触发的事件');
			}
		</script>

事件对象 Event

兼容方式

当参数为 event时的兼容方式

       <script type="text/javascript">
			document.onclick=function(event){
				var oEvent=event || window.event;
//				结果为:"[object MouseEvent]"
				console.log(oEvent);
			}
		</script>

当参数为ev时的兼容方式

      <script type="text/javascript">
            window.function(){
				document.onclick=function(ev){
					//兼容浏览器
					var oEvent=ev || event;
                   //结果为:"[object MouseEvent]"
					console.log(oEvent);
				}
			}
		</script>
event 常用属性
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			window.function(){
				var btn1=document.getElementById('btn1');
				document.onclick=function(ev){
					//兼容浏览器
					var oEvent=ev || event;
					//返回触发事件的元素
					var oCurrent=oEvent.target || oEvent.srcElement;
                     //返回结果:"[object HTMLInputElement]"
					console.log(oCurrent);
					//返回事件类型"click"
					console.log(oEvent.type); 
					/结果为:/"[object HTMLInputElement]"
					console.log(oEvent.currentTarget);
					//在事件对象是document的时候  返回结果为//"[object HTMLDocument]"	
					console.log(oEvent.currentTarget);
				}
			}
		</script>
	</head>
	<body>
		<input type="button" id="btn1" value="事件处理程序" />
	</body>
</html>

target和currentTarget之间的区别:
在事件对象是document的前提下,前者返回的结果为:"[object HTMLHtmlElement]";后者返回的结果为:"[object HTMLDocument]"

表单事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			window.function(){
				//获取第一个文本框
				var txt1=document.for1.userName;
//				alert(txt1);
				//给获取到的元素添加失去焦点事件
				txt1.onblur=function(){
					if(txt1.value!='admin'){
						//假设用户输入有误,需把文本框的焦点重新设置个当前这个元素
						// 使用方法focus()
						document.getElementById('span1').innerText='用户名输入错误,重新输入';
						txt1.focus();
						txt1.value='';
					}else{
						document.getElementById('span1').innerText='用户名输入正确';
					}
				}
				//在文本1中有默认的值admin,但是在用户点击文本框获得焦点时,清除内容
				txt1.onfocus=function(){
					this.value='';
					this.style.background='yellow';
				}
			}
		</script>
	</head>
	<body>
		<form method="get" name="for1">
			<label for="userName">
				账户:<input type="text" value="admin" name="userName" id="userName" />
			</label>
			<span id="span1">错误信息提示。。。。</span>
			<br />
			<label for="pwd">
				密码:<input type="password" name="pwd" id="pwd" />
			</label>
			<br />
			<label for="rad">
				性别:<input type="radio"  name="rad1" id="rad"/>男
			</label>
			<label for="rad1">
				<input type="radio" name="rad1" id="rad1" />女
			</label>
		</form>
	</body>
</html>

三级联动

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>三级联动</title>
		<script type="text/javascript">
			window.function(){
				var select_prov=document.getElementById('select_prov');
				var select_city=document.getElementById('select_city');
				select_prov.onchange=function(){
				//清空城市下拉框
					select_city.innerHTML='';
					select_city.innerHTML='<option>---请选择城市---</option>';
				//获取省份选中的索引
					var index_prov=select_prov.selectedIndex;
					var arr_city=['西安市','宝鸡市','渭南市','咸阳市'];
					if(index_prov==1){  //表示陕西省
						for(var i=0;i<arr_city.length;i++){
							select_city.innerHTML+='<option>'+arr_city[i]+'</option>';
						}
					}
				}
			}
		</script>
	</head>
	<body>
		省份:
		<select id="select_prov">
			<option>---请选择省份---</option>
			<option value="陕西省">陕西省</option>
			<option value="甘肃省">甘肃省</option>
			<option value="河南省">河南省</option>
			<option value="四川省">四川省</option>
		</select>
		城市:
		<select id="select_city">
			<option>---请选择城市---</option>
			<option>西安市</option>
			<option>宝鸡市</option>
			<option>咸阳市</option>
			<option>渭南市</option>
			<option>兰州市</option>
			<option>天水市</option>
			<option>平凉市</option>
			<option>武威市</option>
			<option>郑州市</option>
			<option>许昌市</option>
			<option>成都市</option>
			<option>广元市</option>
		</select>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_43750162/article/details/87633442