<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        .box1 {
            width: 200px;
            height: 200px;
            background-color: black;
        }
        .box2 {
            width: 100px;
            height: 100px;
            background-color: red;
        }
        .box3 {
            width: 50px;
            height: 50px;
            background-color: blue;
        }
    </style>
    <script type="text/javascript">

//案例中点击box3时:分别会出现以下情况

        // 使用target会弹出三次box3
        // 使用this会弹出box3 box2 box1(冒泡)
        window.onload = function () {
            var box1 = document.getElementsByClassName("box1")[0];
            var box2 = document.getElementsByClassName("box2")[0];
            var box3 = document.getElementsByClassName("box3")[0];
            box1.onclick = function (event) {
                event = event || window.event;  //估计是兼容性写法
                alert(event.target.className);  //event.target指向的是被触发事件(被点击)的对象
                // alert(this.className);   //this指向的是事件绑定的对象
            }
            box2.onclick = function (event) {
                event = event || window.event;
                alert(event.target.className);
                // alert(this.className);
            }
            box3.onclick = function (event) {
                event = event || window.event;
                alert(event.target.className);
                // alert(this.className);
            }
        }
        // 运行这个DEMO,在事件冒泡的背景下,点击box3,event.target.className为box3,之后冒泡的事件弹出的信息也为box3;
        // 这是因为event.target指向的是被触发事件(被点击)的对象(box3),仅通过box3触发了一次事件(点击),所以只弹出一次box3;
        // 而this.name则依次弹出的为box3,box3,box1,这是因为this指向的是事件绑定的对象,事件冒泡中连续触发了三次事件,这三次事件绑定的对象都不同。
        // 简单的说就是,你点击了box3,那么e.target就是box3;并且由于你点击了box3,通过点击box3冒泡触发了box1,box2,
        // 在box1和box2的事件中,e.target也是box3。但是this是谁,就和由谁触发了事件无关了。比如,无论是box2,还是box3触发了box1的事件,还是box1的事件根本没有被触发,box1的事件的this永远都是box1,忠心耿耿
        // ========================总结==========================
        // 1.this是Javascript语言的一个关键字。
        // 2.this代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。
        // 3.event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
        // 4.this和event.target的区别:
        // js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化(在事件触发时,只传递当前event对象的引用),它永远是直接接受事件的目标DOM元素;
        // 另外,this和event.target都是dom对象,如果要使用jquey中的方法可以将他们转换为jquery对象:$(this)和$(event.target);
    </script>
</head>
<body>
    <div class="box1">
        <div class="box2">
            <div class="box3">
            </div>
        </div>
    </div>
</body>
</html>

小结event.target与this的更多相关文章

  1. window.event.srcElement与window.event.target 触发事件的元素

    IE浏览器支持window.event.srcElement , 而firefox支持window.event.target:<input type="text" onblu ...

  2. jquery this 和 event.target 区别

    1.this和event.target的区别: js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素: 2.this和event.t ...

  3. Javascript中event.srcElement和event.target的区别

    event.srcElement 可以捕获当前事件作用的对象,如event.srcElement.tagName可以捕获活动标记名称.注意获取的标记都以大写表示,如"TD",&qu ...

  4. 【前端】event.target 和 event.currentTarget 的区别

    event.target 和 event.currentTarget 的区别 举例说明: <!DOCTYPE html> <html> <head> <tit ...

  5. event.target指向谁?

    学习中,有时遇到event.target,总是不明白为什么要用target,后来学习了下,大概了解了event.target到底指什么元素了,关于event和this的内容,下回再说: 先摆结论:ev ...

  6. js中event.target

    event.srcElement从字面上可以看出来有以下关键字:事件,源     他的意思就是:当前事件的源, 我们可以调用他的各种属性 就像:document.getElementById(&quo ...

  7. 捕获当前事件作用的对象event.target和event.srcElement

    语法: //返回事件的目标节点(触发该事件的节点). event.target //FF,Chrome event.srcElement //IE 栗子: var oDiv=document.getE ...

  8. js的event.srcElement与event.target(触发事件对象)

    IE下,event对象有srcElement属性,但是没有target属性; Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的,即: fire ...

  9. ie9及以下不兼容event.target.dataset对象

    ie9及以下不兼容event.target.dataset对象,请使用event.target.getAttribute('data-xxx')

随机推荐

  1. SAP Context menu(菜单)

    *&---------------------------------------------------------------------* *& Report RSDEMO_CO ...

  2. Error: $injector:modulerr Module Error

    Failed to instantiate module app due to://实例化失败 Error: [$injector:modulerr] http://errors.angularjs. ...

  3. 论文解读(SR-GNN)《Shift-Robust GNNs: Overcoming the Limitations of Localized Graph Training Data》

    论文信息 论文标题:Shift-Robust GNNs: Overcoming the Limitations of Localized Graph Training Data论文作者:Qi Zhu, ...

  4. Python:一个闹钟

    随着一个<霍格沃茨:一段校史>风格的大字(呃,这字好像并不大--)标题的出现,无聊的我没事干,又开始整活了~ 之前我做的程序,一个使用了Tkinter库,一个则是Pygame,总之都是带有 ...

  5. Python基础教程:模块重载的五种方法

    环境准备 新建一个 foo 文件夹,其下包含一个 bar.py 文件 $ tree foo foo └── bar.py 0 directories, 1 file bar.py 的内容非常简单,只写 ...

  6. 【微服务专题之】.Net6下集成消息队列上-RabbitMQ

    ​ 微信公众号:趣编程ACE关注可了解更多的.NET日常实战开发技巧,如需源码 请公众号后台留言 源码;[如果觉得本公众号对您有帮助,欢迎关注] .Net中RabbitMQ的使用 [微服务专题之].N ...

  7. 12.1 Android Studio如何手动下载Gradle文件

    实际操作过程中,可能由于各方面原因,导致Gradle无法下载,或者下载比较慢,这个时候,其实我们可以手动下载,或者找一个最近的版本,替换他. 确认要下载的版本 不论是用命令编译Android项目,还是 ...

  8. # Vue3 toRef 和 toRefs 函数

    Vue3 toRef 和 toRefs 函数 上一篇博文介绍了 vue3 里面的 ref 函数和 reactive 函数,实现响应式数据,今天主要来说一下 toRef 函数和 toRefs 函数的基本 ...

  9. android stdio开发抖音自动点赞案例

    最近做了一个安卓开发自动刷抖音. 点赞. 评论等等养号行为. 总结一下知识点和遇到的一些问题: 知识点: 1. 使用acessibility mode 对抖音自动化操作. android stdio中 ...

  10. idea反编译jar包,jclasslib Bytecode Viewer

    下载 jclasslib Bytecode Viewer https://plugins.jetbrains.com/plugin/9248-jclasslib-bytecode-viewer/ver ...