重拾前端记忆,记录学习笔记,现在进入JavaScript 事件部分
事件处理程序分为以下三种:
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
head>
<body>
<button onclick="clickHandle()">HTML事件按钮button>
<button id="btn">DOM0级按钮button>
<button id="btn1">DOM2级按钮button>
<script>
// HTML事件
function clickHandle() {
alert("点击了HTML事件按钮");
}
// DOM0级事件
var btn = document.getElementById("btn");
btn.onclick = function(){
alert("点击了DOM0级按钮A");
}
btn.onclick = function(){
alert("点击了DOM0级按钮B");
}
// DOM2级事件
var btn1 = document.getElementById("btn1")
btn1.addEventListener("click",click1);
btn1.addEventListener("click",click2);
btn1.removeEventListener("click",click3)
function click1() {
alert("第一次DOM2级事件");
}
function click2() {
alert("第二次DOM2级事件");
}
function click3() {
alert("第三次DOM2级事件");
}
script>
body>
html>
效果如下,点击HTML事件按钮:

点击DOM0级按钮,可以看到“点击了DOM0级按钮A”提示并没有展示,如下:

点击DOM2级按钮,依次出现以下两种提示:


由此可以得出以下结论:
HTML事件的缺点:HTML与JS代码没有分开
DOM0级事件的优点:HTML与JS代码是分离的。缺点:存在多个事件会进行覆盖
DOM2级事件的优点:存在多个事件不会进行覆盖,会依次执行
鼠标事件指与鼠标相关的事件,具体的事件列举如下:
注意:这些方法在使用的时候,除了DOM2级事件,都要添加on前缀
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
<style>
.box1{
width: 100px;
height: 100px;
background-color: aqua;
}
.box2{
width: 200px;
height: 200px;
background-color: antiquewhite;
margin-top: 30px;
}
style>
head>
<body>
<button id="btn1">单击button>
<button id="btn2">双击button>
<button id="btn3">按下button>
<button id="btn4">释放button>
<div id="box1" class="box1">div>
<div id="root1" class="box2">
<div id="box2" class="box1">div>
div>
<div id="root2" class="box2">
<div id="box2" class="box1">div>
div>
<div id="root3" class="box2">div>
<script>
var btn1 = document.getElementById("btn1");
var btn2 = document.getElementById("btn2");
var btn3 = document.getElementById("btn3");
var btn4 = document.getElementById("btn4");
var box1 = document.getElementById("box1");
var root1 = document.getElementById("root1");
var root2 = document.getElementById("root2");
var root3 = document.getElementById("root3");
btn1.onclick = function(){
console.log("鼠标单击打印");
}
btn2.ondblclick = function(){
console.log("鼠标双击打印");
}
btn3.onmousedown = function(){
console.log("鼠标按下打印");
}
btn4.onmouseup = function(){
console.log("鼠标释放打印");
}
box1.onmousemove = function(){
console.log("鼠标移动打印");
}
root1.addEventListener("mouseenter",enter1);
root1.addEventListener("mouseleave",leave1)
function enter1() {
console.log("鼠标进入打印A");
}
function leave1() {
console.log("鼠标离开打印A");
}
root2.addEventListener("mouseover",over1);
root2.addEventListener("mouseout",out1)
function over1() {
console.log("鼠标进入打印B");
}
function out1() {
console.log("鼠标离开打印B");
}
root3.onwheel = function(){
console.log("滑动滚轮");
}
script>
body>
html>
事件发生后,会产生一个事件对象,作为参数传递给监听函数,如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<button id="btn1">单击按钮button>
<script>
var btn1 = document.getElementById("btn1");
btn1.onclick = function(event){
console.log(event);
}
script>
body>
html>
结果如下:

Event.target 属性返回事件当前所在节点,示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<button id="btn1">单击按钮button>
<script>
var btn1 = document.getElementById("btn1");
btn1.onclick = function(event){
console.log(event.target);
}
script>
body>
html>
结果如下:

Event.type属性返回一个字符串,表示事件类型,该属性只读,示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<button id="btn1">单击按钮button>
<script>
var btn1 = document.getElementById("btn1");
btn1.onclick = function(event){
console.log(event.type);
}
script>
body>
html>
结果如下:

Event.preventDefault 用于取消浏览器对当前事件的默认行为,示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<a href="https://www.baidu.com/" id="baidu">前往百度a>
<script>
var baidu = document.getElementById("baidu");
baidu.onclick = function(event){
event.preventDefault();
console.log("点击了a标签");
}
script>
body>
html>
结果如下,点击a标签不会进行页面跳转,且继续执行下面的js代码:

Event.stopPropagation 方法用于阻止事件在DOM中继续传播,防止再触发定义在别的节点上的事件监听函数,但是不包括在当前节点其他的事件监听函数,示例如下:
如果没有使用Event.stopPropagation方法时:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.root{
width: 200px;
height: 200px;
background-color: bisque;
}
.box{
width: 100px;
height: 100px;
background-color: burlywood;
}
style>
head>
<body>
<div class="root" id="root">
<div class="box" id="box">div>
div>
<script>
var root = document.getElementById("root");
var box = document.getElementById("box");
root.onclick = function(){
console.log("点击了root");
}
box.onclick = function(){
console.log("点击了box");
}
script>
body>
html>
结果如下,点击box会触发父节点root的监听函数:

使用Event.stopPropagation方法防止再触发定义在别的节点上的事件监听函数,代码如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.root{
width: 200px;
height: 200px;
background-color: bisque;
}
.box{
width: 100px;
height: 100px;
background-color: burlywood;
}
style>
head>
<body>
<div class="root" id="root">
<div class="box" id="box">div>
div>
<script>
var root = document.getElementById("root");
var box = document.getElementById("box");
root.onclick = function(){
console.log("点击了root");
}
box.onclick = function(e){
e.stopPropagation();
console.log("点击了box");
}
script>
body>
html>
结果如下,点击box只触发本节点的监听函数:

键盘事件由用户敲击键盘时触发,主要有一下三个事件:
注意:对于keypress,按下Ctrl、Alt、Shift、Meta这样无值的键时不会触发;而对于有值的键,按下时先触发keydown事件,再触发这个事件
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
head>
<body>
<input type="text" id="user">
<script>
var user = document.getElementById("user");
user.onkeydown = function (){
console.log("按下了键盘");
}
user.onkeypress = function(){
console.log("按下了有值的键");
}
user.onkeyup = function(e){
console.log("松开了键盘");
console.log("输入的内容是:"+e.target.value);
}
script>
body>
html>
结果如下:

keyCode:唯一标识,可通过此属性判断按下了什么键,示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
head>
<body>
<input type="text" id="user">
<script>
var user = document.getElementById("user");
user.onkeydown = function (e){
console.log("按下了键盘");
if (e.keyCode === 13){
console.log("按下了回车");
}
}
script>
body>
html>
在输入框敲击回车时,结果如下:

表单事件是在使用表单元素及输入框元素可以监听的一系列事件
input事件 当、
input事件的一个特点就是可以连续触发,比如用户每按下一次按键,就会触发一次input事件
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
head>
<body>
<input type="text" id="user">
<script>
var user = document.getElementById("user");
user.oninput = function (e) {
console.log(e.target.value);
}
script>
body>
html>
结果如下:

select事件当在、
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
head>
<body>
<input type="text" id="user">
<script>
var user = document.getElementById("user");
user.onselect = function (e) {
console.log(e.target.value);
}
script>
body>
html>
结果如下:

Change事件 当、
它与input事件最大的不同,就是不会连续触发,只有当全部修改完成(失去焦点)时才会触发
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>清风不渡title>
head>
<body>
<input type="text" id="user">
<script>
var user = document.getElementById("user");
user.onchange = function (e) {
console.log(e.target.value);
}
script>
body>
html>
结果如下:

这两个事件发生在表单对象