批改状态:合格
老师批语:事件代理是有前提的, 也不可以滥用, 并非所有的事件都支持,例如, mouseenter, mouseleave, 就不能用
一、事件类型与属性
1、鼠标事件: mouseover mouseout
2、键盘事件:keydown keyup keypress
3、系统事件:selinterval/clearInterval selTimeout / cleraTimeout 定时器
二、事件阶段
1、事件捕获:由大到小,自上而下
2、事件目标:当前事件
3、事件冒泡: 由小到大,自下而上
三、事件代理/委托: 仅适用于事件冒泡阶段

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件</title>
</head>
<body>
<div>
<button id="bt" class="btt">hello~</button>
<ul>
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
</ul>
<script>
var btn = document.getElementById("bt");
btn.onclick=function (ev) {
alert('欢迎光临')
};
var ul = document.getElementsByTagName('ul').item(0);
ul.addEventListener("click", function (event) {
alert('欢迎再次光临');
},false);
</script>
</div>
</body>
</html>点击 "运行实例" 按钮查看在线实例
四、留言板案例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>留言板</title>
<style type="text/css">
.box{
background-color: lightblue;
width: 380px;
height: 280px;
margin:0 auto;
/*text-align: center;*/
padding-top: 5px;
padding-left: 20px;
border-radius: 5%;
border: 2px black solid;
}
h4{
margin: 10px;
}
.but{
display: inline-block;
}
/*body{ text-align:center}*/
.time{
display: inline-block;
margin-right: 0px;
margin-bottom: 0px;
}
</style>
</head>
<body>
<div class="box">
<h4>这家伙很懒,什么都没有留下...</h4>
<label for="comment">请留言:</label>
<input type="text" id="comment" autofocus>
<ul id="list" style="list-style-type:none">
</ul>
<div class="time">2019-07-15</div>
</div>
<script>
// 抓取留言框元素.
var comment=document.getElementById('comment');
// 抓取留言列表
var list =document.getElementById('list');
// 事件监听
comment.addEventListener('keypress',addComent,false);
// 添加事件方法 keypress
function addComent(event) {
console.log(event.key);
if(event.key==='Enter'){
// 创建li元素,用item保存
var item= document.createElement('li');
// 添加内容,当前元素添加文本
item.innerHTML=comment.value + ' <button class="but" style="margin-right: 0">删除</button>';
// 添加留言到页面中
// 先判断,改列表是否有元素,如果没有,直接添加
if (list.childElementCount === 0) {
list.appendChild(item);
}
// 否则,把内容添加到第一个元素上
else{
list.insertBefore(item,list.firstElementChild);
}
// 清空留言
comment.value=null;
}
}
// 事件代理
list.addEventListener('click',del,false);
function del(event) {
if (confirm('是否删除?')){
// 父节点
var ul =event.currentTarget;
// 当前正在触发的事件
var btn=event.target;
// 要删除的节点
var li=btn.parentElement;
ul.removeChild(li);
}
return false;
// 可简化为
// event.currentTarget.removeChild(event.target.parentElement);
}
</script>
</body>
</html>点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号