Web基础——JavaScript之事件绑定与事件对象

1.事件的绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#d1 {
				height: 100px;
				width: 150px;
				background-color: aquamarine;
			}
		</style>
	</head>
	<body>
		<!-- 绑定事件的方式1,直接在标签上绑定 -->
		<button type="button" onclick="show('hello')">一个按钮</button>
		<div id="d1">
			点我呀
		</div>
		<input type="button" value="我的按钮" id="btn" />
	</body>
	<script type="text/javascript">
		function show(msg) {
			alert(msg)
		}

		//方式2 来绑定事件
		var myDiv = document.getElementById("d1");
		var hehe=function() {
			alert("hehe")
		}
		//把处理函数,设置为 null 就可以解绑事件
		//hehe=nul;
		myDiv.onclick = hehe;
		
		//方式3,来绑定事件
		// 3. 通过 addEventListener() 方法 来添加事件
		// 语法:document.getElementById("myBtn").addEventListener("click",事件处理函数);
		var btn = document.getElementById("btn");
		var test = function() {
			alert("点击了");
		};
		btn.addEventListener("click", test)
		//解绑事件
		btn.removeEventListener('click',test);
	</script>
</html>

2.事件的绑定(注意事项)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button id="btn1" type="button">按钮1111</button>
		<button id="btn2" type="button">按钮22222</button>
	</body>
	<script type="text/javascript">
		var btn1=document.getElementById("btn1");
		btn1.onclick=function(){
			alert("btn11111111111");
		}
		//多次绑定同一类型的事件,就会覆盖上一次的。
		btn1.onclick=function(){
			alert("btn11111111111555555555555555555555555555");
		}
		
		//使用 addEventListener() 这个方法来绑定多个同类型事件,不会覆盖
		var btn2=document.getElementById("btn2");
		btn2.addEventListener("click",function(){
			alert("btn2222222222")
		})
		btn2.addEventListener("click",function(){
			alert("btn222222222288888888888888888888")
		})
	</script>
</html>

3.失去焦点和获得焦点

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		用户名:<input type="text" name="username" onfocus="clearText()" id="" value="请输入用户名"/>
	</body>
	<script type="text/javascript">
		function clearText(){
			var ele=document.getElementsByName('username')[0];
			ele.value="";
		}
	</script>
</html>

4.键盘事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- * 键盘事件:
					* onkeydown 某个键盘按键被按下。
					* onkeyup 某个键盘按键被松开。 
					* onkeypress 某个键盘按键被按下并松开。 
					通过事件对象event中的keyCode属性,可以获取键盘某个键的键码  其实就是ASCII码表中对按键的编码                                                                        e.keyCode	 -->
		<!-- event 事件对象,单词不要写错 -->
		<input onkeypress="show(event)"  type="text" name="" id="" value="" />
	</body>
	<script type="text/javascript">
	//w 往前  s 往后  a 往左 d 往右
		function show(e) {
			//事件对象的属性 可以获取按键的编码
			var code=e.keyCode;
			console.log("按键被按下了"+code);
		}
		/* function show2(e) {
			console.log("按键抬起了");
		} */
	</script>
</html>

5.鼠标事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#d1{
				height: 200px;
				width: 100px;
				background: red;
			}
		/* 	#d1:hover{	
			}
			#d1:active{
			} */
		</style>
	</head>
	<body>
		<!--test1(this) this表示绑定了该事件的元素
		event,事件对象,名字不要写错
		-->
		<div id="d1" onmousemove="show(this)" onmouseover="test1(this)" onmouseout="test2(this)" onmousedown="test3(this,event)" onmouseup="test4(this)">
		</div>
		<script type="text/javascript">
			function test1(ele){
				ele.style.background="yellow";
				
			}
			function test2(ele){
				ele.style.background="blue";
			}
			function test3(ele,e){
				// e.which 获取鼠标按键的编号 1 左键  2滚轮   3右键
				var num=e.which
				//alert(e.which);
				
				ele.style.background="pink";
			}
			function test4(ele){
				ele.style.background="black";
			}
			var i=200;
			function show(ele){
				ele.style.height=(i+=2)+"px";
				console.log(i);
			}
		</script>
	</body>
</html>

6.表单事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<form action="#" method="get" onsubmit="return tijiao()" onreset="chongzhi()">
			<input type="text" name="username" id="" value="" oninput="checkUsername()"/>
			<span id="sp"></span>
			<input type="submit" value="提交" />
			<input type="reset" value="重置" />
		</form>
	</body>
	<script type="text/javascript">
		function tijiao() {
			alert("表单提交");
			return checkUsername(); // 返回true 表单数据会提交给后台,false 不会提交
		}
		function chongzhi() {
			alert("表单重置");
		}
		function checkUsername(){
			console.log("边输入,边触发");
			var regx=/^[a-z]{6,16}$/i;
			var text=document.getElementsByName('username')[0].value.trim();
			var flag=regx.test(text);
			var sp=document.getElementById('sp');
			if(flag){
				sp.innerHTML='<b style="color: green;">用户名格式正确✔<b>'
			}else{
				sp.innerHTML='<b style="color: red;">用户名格式错误✘<b>'
			}
			return flag;
		}
	</script>
</html>

7.页面加载事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//等文档中的所有元素加载完成之后执行,注意绑在window对象上
			window.onload = function() {
				var btn = document.getElementById("btn");
				alert(btn);
			}
		</script>
	</head>
	<body>
		<button type="button" id="btn">一个按钮</button>
	</body>
</html>

8.下拉框事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="text" name="" id="" value="输入框中的文本内容" onselect="change()" />
		<!-- onchange 当你选择下拉项会触发 -->
		<select name="" onchange="select()">
			<option value="">--请选择学历--</option>
			<option value="">--小学--</option>
			<option value="">--中学--</option>
			<option value="">--大学--</option>
		</select>
		<script type="text/javascript">
			function select() {
				alert("你选择了")
			}
			function change(){
				alert("你扩选了");
			}
		</script>
	</body>
</html>

9.事件对象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- 直接传递事件对象 -->
		<button type="button" onclick="show(event)" id="btn">一个按钮</button>
		<button type="button" onclick="show2()">一个按钮</button>
	</body>
	<script type="text/javascript">
		//event 事件对象,由浏览器创建,我们可以拿来使用
		function show(e){
			//e 你传递过来的事件对象
			// keyCode 当绑定了键盘事件,可以从事件对象中获取按键的键码(ASCII码)
			//button  当绑定了鼠标事件,可以从事件对象中获取鼠标按键的键码 0 左键 1滚轮 2右键
			//type获取事件类型 click
			//alert(e.type);
			//document.getElementById('btn').style.background="red";
			//获取绑定了该事件的元素
			var ele=e.target;
			//var ele=e.currentTarget;
			ele.style.background="yellow";
		}
		//直接在函数里面获取
		function show2(){
			//event就是事件对象
			var e=window.event;
			alert(e);
		}
	</script>
</html>

10.currentTarget和target的区别

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#wai{
				height: 200px;
				width: 200px;
				background: gold;
			}
		</style>
	</head>
	<body>
		<div id="wai" onclick="show(event)">
			<button type="button" id="btn">一个按钮</button>
		</div>
		<script type="text/javascript">
			function show(e){
				//target获取的是触发了事件的那个元素。
				//currentTarget 获取的是绑定了该事件的元素对象
				var ele=e.currentTarget;
				//alert(ele);
				ele.style.background="red";
			}
		</script>
	</body>
</html>

11.事件的冒泡现象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#one{
				height: 400px;
				width:400px;
				background:red;
			}
			#two{
				height: 300px;
				width:300px;
				background:blue;
			}
			#three{
				height: 200px;
				width:200px;
				background:yellow;
			}
		</style>
	</head>
	<body>
		<div id="one" onclick="show1()">
			1
			<div id="two" onclick="show2()">
				2
				<div id="three" onclick="show3()">
					3
				</div>
			</div>
		</div>
		<script type="text/javascript">
		//事件冒泡,事件从内层元素,一次向外触发。
		//如果你不想需要这种事件冒泡现象,那我们就得阻止事件冒泡行为
			function show1(){
				alert("1111111111111111")
			}
			function show2(){
				alert("22222222222")
			}
			function show3(){
				alert("3333333")
			}
		</script>
	</body>
</html>

12.阻止事件冒泡的行为

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#one{
				height: 400px;
				width:400px;
				background:red;
			}
			#two{
				height: 300px;
				width:300px;
				background:blue;
			}
			#three{
				height: 200px;
				width:200px;
				background:yellow;
			}
		</style>
	</head>
	<body>
		<div id="one" onclick="show1(event)">
			1
			<div id="two" onclick="show2(event)">
				2
				<div id="three" onclick="show3(event)">
					3
				</div>
			</div>
		</div>
		<script type="text/javascript">
		//事件冒泡,事件从内层元素,一次向外触发。
		//如果你不想需要这种事件冒泡现象,那我们就得阻止事件冒泡行为
		//我们可以通过,事件对象中的 stopPropagation() 方法来阻止冒泡行为
			function show1(e){
				alert("1111111111111111")
				//阻止事件冒泡
				 e.stopPropagation();
			}
			function show2(e){
				alert("22222222222")
				 e.stopPropagation();
			}
			function show3(e){
				alert("3333333")
				 e.stopPropagation();
			}
		</script>
	</body>
</html>

13.元素的默认行为

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- a 标签 跳转页面是一个默认行为 我只想让a标签,执行点击事件,但是不要跳页面-->
		<a href="http://www.163.com" onclick="show(event)">一个连接</a>
		<!-- 阻止a标签的默认行为,其他方式 -->
		<a href="javascript:void(0)" onclick="show2()">一个连接</a>
		<a href="javascript:;;" onclick="show2()">一个连接</a>
		<form action="123.html" method="post" onsubmit="tijiao(event)">
			<input type="submit" value="提交"/>
		</form>
	</body>
	<script type="text/javascript">
		function show(e){
			alert("abc");
			e.preventDefault(); //阻止元素的默认行为
		}
		function show2(){
			alert("abc");
			
		}
		function tijiao(e){
			e.preventDefault(); //阻止表单默认同步提交额行为
			alert("异步提交表单");
		}
	</script>
</html>

14.事件捕获

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#one{
				height: 400px;
				width:400px;
				background:red;
			}
			#two{
				height: 300px;
				width:300px;
				background:blue;
			}
			#three{
				height: 200px;
				width:200px;
				background:yellow;
			}
		</style>
	</head>
	<body>
		<div id="one">
			1
			<div id="two">
				2
				<div id="three">
					3
				</div>
			</div>
		</div>
		<script type="text/javascript">
		//事件捕获,事件从外层,向内层依次触发
		//如果你不想需要这种事件冒泡现象,那我们就得阻止事件冒泡行为
			function show1(){
				alert("1111111111111111")
			}
			function show2(){
				alert("22222222222")
			}
			function show3(){
				alert("3333333")
			}
			//addEventListener() 方法的参数3 false 默认值,表示冒泡, true 事件捕获。
	
	        document.getElementById("one").addEventListener('click',show1,true);
			document.getElementById("two").addEventListener('click',show2,true);
			document.getElementById("three").addEventListener('click',show3,true);
		</script>
	</body>
</html>

15.事件委托

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<ul id="myUL">
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
			<li class="myli">这是一个个列表项</li>
		</ul>
	</body>
	<script type="text/javascript">
		/* var liArr=document.getElementsByClassName("myli");
		for(let i=0;i<liArr.length;i++){
			//直接给每一个 子元素绑定
			liArr[i].addEventListener('click',function(){
				alert("点击了");
			})
		} */
		//事件委托,把所有子元素的事件,绑定给给父元素
		document.getElementById("myUL").addEventListener('click',function(e){
			//alert("点击了");
			 e.target.style.backgroundColor = 'red';
		})
	</script>
</html>

16.设置元素的自带属性以及设置元素的css样式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
		</style>
	</head>
	<body>
		<button type="button" disabled="disabled">一个按钮</button>
		<button type="button" id="btn" onclick="test2(this)">一个按钮2222222222</button>
		<input type="radio" name="sex" id="" value="1" /><input type="radio" name="sex" id="" value="0" /></body>
	<script type="text/javascript">
		var btn=document.getElementById("btn");
		//设置元素的自带属性
		btn.disabled=false; //true 表示禁用,false表示不禁用
		var arr=document.getElementsByName("sex");
		//alert(arr.length);
		for(let i=0;i<arr.length;i++){
			arr[i].addEventListener("change",function(){
				//this 当前绑定了该事件的元素
				var v=this.checked;
				alert(v);
			})
		}
		function test(ele){
			//使用js代码设置元素的CSS样式
			//元素对象.style.css属性名=值  
			ele.style.width="100px"; //值是字符串类型
			ele.style.height="40px";
			//css属性如果有横杠拼接的,要注意,把横杠去掉,把横杠后面的第一个字母变大写
			//例如: background-color 得变成  backgroundColor
			ele.style.backgroundColor="red";
			
		}
		function test2(ele){
			//使用js代码设置元素的CSS样式
			//方式2: ele.style.cssText="css内联样式的写法"
			ele.style.cssText="width:200px;height:100px;background-color:yellow";
		}
	</script>
</html>

17.开关案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<img src="img/pic_bulboff.gif" onclick="kaiGuan(this)">
	</body>
	<script type="text/javascript">
		var flag = true;
		function kaiGuan(ele) {
			if (flag) {
				ele.src = "img/pic_bulbon.gif";
				//开启功能
			} else {
				ele.src = "img/pic_bulboff.gif";
				//关闭功能
			}
			flag = !flag; //修改标记
		}
	</script>
</html>

开关图片
在这里插入图片描述
在这里插入图片描述

18.排他思想

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button>按钮1</button>
		<button>按钮2</button>
		<button>按钮3</button>
		<button>按钮4</button>
		<button>按钮5</button>
	</body>
	<script type="text/javascript">
		var btns=document.getElementsByTagName("button");
		for(let i=0;i<btns.length;i++){
			btns[i].onclick=function(){
				//把所有元素的背景恢复成默认
				clearColor();
				this.style.backgroundColor="red";
			}
		}
		function clearColor(){
			for(let i=0;i<btns.length;i++){
				btns[i].style.backgroundColor="";
			}
		}
	</script>
</html>

19.图片跟随鼠标

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			img{
				position: absolute;
				top:0;
				left:0;
			}
		</style>
	</head>
	<body>
		<img src="img/yazi.gif" id="tp">
	</body>
	<script type="text/javascript">
		//你要整个页面绑定事件,绑定 document 上
		//标准浏览器中是浏览器给方法传递的参数,只需要定义形参 e 就可以获取到。
		//或者 window.event 中获取事件对象
		document.addEventListener('mousemove', function(e) {
			// 2. page 鼠标在页面文档的x和y坐标
			var x = e.pageX;
			var y = e.pageY;
			//获取图片对象
			var img = document.getElementById("tp");
			//设置图片的样式
			img.style.left = x + "px";
			img.style.top = y + "px";
		})
	</script>
</html>

20.定位到搜索框

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="search" name="" id="ss" value="" />
		<button type="button" onclick="sousuo()">搜索</button>
		<hr size="12000px">
	</body>
	<script type="text/javascript">
		function sousuo() {
			alert("搜索");
		}
		//当输入完搜索的内容,敲回收开始搜索
		document.getElementById("ss").addEventListener('keydown', function(e) {
			//alert(e.keyCode);
			if (e.keyCode == 13) {
				alert("开始搜索")
			}
		})
		//给整个文档绑定按键抬起事件
		document.addEventListener('keyup', function(e) {
			//alert(e.keyCode);
			//判断 按的是 s
			if (e.keyCode == 83) {
				//让输入框获取焦点 focus() 在文本域上设置焦点。 
				document.getElementById("ss").focus();
				e.pageY = 0 + "px"; //让页面定位到顶部  pageY纵坐标
			}
		})
	</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Geek Li

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

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

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

打赏作者

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

抵扣说明:

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

余额充值