前言
本片笔记主要讲解DOM常用事件的绑定和学习,并会在后面配有练习案例
一、DOM事件绑定
DOM事件分为也分级别,常听见的就是0级、1级、2级和3级了。这里我们只讲0级和2级。(其实是老师只讲了0级和2级,然后我看网上关于DOM级别的描述都很官方的专业术语那种,实在看着头疼,所以还是不放出来误导大家了)
好了,下面让我们开始了解一下关于DOM不同级别的事件绑定
DOM0级别事件绑定
DOM0级的事件绑定被所有浏览器所兼容。主要分为HTML和JS绑定两种方式:
//HTML的事件绑定
<input type="button" id="t1" value="测试" onclick="display()" />
//JS的事件绑定
<input type="button" id="t1" value="测试" />
<script type="text/javascript">
document.getElementById('t1').onclick = display; //这里display后面不能加括号,如果在后面加上了括号的话事件就会立即执行
function display(){
console.log(123);
}
</script>
老师语录:
JS绑定事件时,不能加"()",否则会在页面加载时立即执行可以绑定匿名函数
DOM2级别事件绑定
DOM2:添加了两个监听方法来添加和移除事件处理程序
1、addEventListener():添加事件
2、removeEventListener():移出事件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" id="t1" value="测试" />
<script type="text/javascript">
document.getElementById('t1').addEventListener('click',display)//为按钮添加一个点击事件
function display(){
console.log(123);
}
document.getElementById('t1').removeEventListener('click',display)//为按钮解除前面绑定的点击事件
</script>
</body>
</html>
DOM0级事件和DOM2级事件区别
区别一:
DOM0级事件只能绑定一个函数,前面绑定的函数会被覆盖
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" id="t1" value="测试" />
<script type="text/javascript">
document.getElementById('t1').onclick = function(){console.log(1);}
document.getElementById('t1').onclick = function(){console.log(2);}
document.getElementById('t1').onclick = function(){console.log(3);}
</script>
</body>
</html>
效果如下:
DOM2级事件可以绑定多个函数,且有执行顺序
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" id="t1" value="测试" />
<script type="text/javascript">
document.getElementById('t1').addEventListener('click',function(){console.log(1);})
document.getElementById('t1').addEventListener('click',function(){console.log(2);})
document.getElementById('t1').addEventListener('click',function(){console.log(3);})
</script>
</body>
</html>
效果如下:
区别二:
DOM0级事件与DOM2级事件互不影响
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" id="t1" value="测试" />
<script type="text/javascript">
function show(){console.log('啦啦啦啦');}
document.getElementById('t1').addEventListener('click',show)
document.getElementById('t1').onclick = show
</script>
</body>
</html>
效果如下:
事件传参
事件传参顾名思义即是在对绑定的事件的函数中进行传参
而事件传参一般有两种方法:
1、直接行内绑定
<input type="button" id="t1" value="测试" onclick="show('hello')" />
2、使用匿名函数
function show(x){console.log(x);}
document.getElementById('t1').onclick = function(){show('hello')}
不过如果你直接在JS代码里面进行事件绑定且不使用匿名函数的话是不会成功的,因为加上了括号之后绑定事件就会立即执行,如下面这种:
document.getElementById('t1').onclick = show('hello world');
除了主动传入的参数之外,每个事件还有默认的参数,如event参数
event为默认参数,不需传入即可调用,该对象表示触发的事件本身
event.target会返回触发该事件的目标元素
一般来说,event.target我们使用的较多,且用处很大
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" id="t1" value="测试" onclick="show('hello')" />
<script type="text/javascript">
function show(){console.log(event.target.value);console.log(event.target.type);}//使用event.target打印出input的类型和value值
document.getElementById('t1').onclick = show
</script>
</body>
</html>
效果如下:
除此之外,event.code也可以识别你在键盘上按下的按键是什么
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="text" id="t1" onkeyup="show()" />
<p id="result"></p>
<script type="text/javascript">
function show(){
var Input = document.getElementById('t1').value;
document.getElementById('result').innerHTML = Input;
console.log(event.target.value);
if(event.code == 'Enter'){ //判断当用户按下Enter键时跳出弹窗,弹窗显示用户当前输入的文本内容
alert(Input);
}
}
</script>
</body>
</html>
DOM常用事件
事件 | 说明 |
---|---|
onload | 当页面完成加载 |
onclick | 当用户点击了HTML元素 |
onchange | 当HTML元素被改变 |
onkeyup | 当用于按下键盘按键松开后 |
onblur | 当元素失去焦点 |
onfocus | 当元素获得焦点 |
onmouseover | 当用户把鼠标移动到HTML元素之上 |
onmouseout | 当用户把鼠标移开HTML元素 |
onmousemove | 当用户移动鼠标 |