博主信息
博文 11
粉丝 2
评论 0
访问量 10344
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
事件的原理及代理机制和留言板案例----2019-07-11
烦帅不防晒
原创
1054人浏览过

一、事件类型与属性

1、鼠标事件: mouseover    mouseout

2、键盘事件:keydown   keyup   keypress

3、系统事件:selinterval/clearInterval      selTimeout / cleraTimeout     定时器

二、事件阶段

 1、事件捕获:由大到小,自上而下

2、事件目标:当前事件

3、事件冒泡: 由小到大,自下而上

三、事件代理/委托:  仅适用于事件冒泡阶段

 B}4D$FYO1M9@H`QY9S0DV(L.png

实例

<!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>

运行实例 »

点击 "运行实例" 按钮查看在线实例

四、留言板案例

502JDR8@DII35S~M1GU4FYL.png

实例

<!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>

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:合格

老师批语:事件代理是有前提的, 也不可以滥用, 并非所有的事件都支持,例如, mouseenter, mouseleave, 就不能用
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学