zoukankan      html  css  js  c++  java
  • js 事件对象

    /*
    事件绑定的格式:
    元素节点.on + 事件类型 = function(){

    }

    元素节点
    事件类型
    on+事件类型:事件处理函数
    【注】上述三者一绑定:生成一个新的事件对象。
    【注】触发事件以后,系统会去调用相关的事件处理函数。

    事件对象获取:系统调用相关的函数的时候,会直接将生成的事件对象,当做参数传入到我们的函数内部。

    已下代码演示用到的html结果:

    <body>
        <button id = "btn1">按钮</button>
    </body>

    */

                window.onload = function(){
                    var oBtn = document.getElementById('btn1');
                    /*所以
                    oBtn.onclick = function(){}  就是一个事件对象
                    oBtn 也是一个对象,所以我们把上面中的.onclick = function(){}看作是 oBtn对象的一个方法(函数);
                    我们把这个事件函数写在这以后,什么事件调用的呢?
                    我们都知道,只有按钮被点击时才会调用这个事件函数,所以这个函数是系统给调用的。
                    【注】我们自己调用得在页面写如下代码
                        oBtn.onclick();//我们自己调用
                
                    */
                    
                //}
                

    继续看:

                window.onload = function(){
                    var oBtn = document.getElementById('btn1');
                    
                    oBtn.onclick = function(){
                        alert(1);
                    } 
                
                    oBtn.onclick();//我们自己调用     
                    
                }            

    // 这样页面加载过程中就会弹出 消息框   1,点击按钮后也会弹出 消息框 1;


    /* 我们再来看一下 oBtn.onclick = function(){} 在调用的时候我们并没有传参,我们利用arguments(函数内置的数组 arguments(只要声明一个
    函数,系统就会自动分配一个arguments数组)用来存函数内的参数);*/

    //测试一 我们自己调用时 给传入实参会怎么

                window.onload = function(){
                    var oBtn = document.getElementById('btn1');
                    
                    oBtn.onclick = function(){
                        alert(arguments);
                    } 
                
                    oBtn.onclick(10);//我们自己调用   给他一个实参  10  
                
                }

    //给我们的弹窗为 [object Arguments] 说明是一个Arguments对象

    /*我们再来看一下我们传入的10 有没有存进去*/

                window.onload = function(){
                    var oBtn = document.getElementById('btn1');
                    
                    oBtn.onclick = function(){
                        alert(arguments[0]);//arguments函数内数组的0号下标
                    } 
                
                    oBtn.onclick(10);//我们自己调用   给他一个实参  10  
                
                }


    //我们的测试结果是 10 说明我们的 实参已经传入了进去。

    /*测试二 我们来看一下 系统给我们调用时 会给arguments 函数内数组 传入什么*/

                window.onload = function(){
                    var oBtn = document.getElementById('btn1');
                    
                    oBtn.onclick = function(){
                        alert(arguments[0]);//arguments函数内数组的0号下标
                    } 
                    //点击页面上的按钮,让系统自己调用
                            
                }

     

    //点击页面上的按钮 给我们弹出 [object MouseEvent] 翻译出来是鼠标事件对象 ,刚好click就是鼠标事件类型的一种,
    //所以系统在调用时传入的参数是一个 事件对象

    /*
    通过上面的arguments[0]的方式我们可以拿到 这个事件函数的 事件对象,但是我们都知道,在编程中能不用arguments就不用
    arguments,所以我们准备给事件函数添加一个自定义形参ev(因为事件的英语单词为event,所以我们就自定义了一个ev方便代码阅读)
    即oBtn.onclick = function(ev){};具体代码如下*/

                window.onload = function(){
                    var oBtn = document.getElementById('btn1');
                    
                    oBtn.onclick = function(ev){
                        alert(ev);//查看我们的形参
                    } 
                            
                }

    效果与上图相同

    可以看出通过自定义形参的方式依然可以得到 事件对象
    但是在IE8以下不支持这中形式,但是IE给我们提供了一种方式 通过window.event
    具体代码如下

                window.onload = function(){
                    var oBtn = document.getElementById('btn1');
                    
                    oBtn.onclick = function(){
                        alert(window.event);//IE8下的方法 ,看看能弹出点什么
                    } 
                            
                }

    //弹出的内容为 [object PointerEvent] 也是鼠标事件对象的意思,所以我们可以通过这个方法获取,
    //怎么才能兼容所有的浏览器呢,这里有个获取事件对象的固定格式写法,具体代码如下

                oBtn.onclick = function(ev){
                    var e = ev || window.event;
                    //alert(e);
    
                }        

    //利用 或运算的短路操作给 变量 e 赋值 。
    //var e = ev || window.event; 这句语句的意思是 变量 e 如果浏览器有 ev 形参这种方式 或运算后面的 window.event 就不计算了,
    //所以e 也就等于 ev 了,如果没有ev这种形式,就执行后面的语句 e也就等于window。event了;


    /*
    费劲心思的拿到 事件对象 是因为 事件对象有很多属性要加在事件对象上。
    例如鼠标事件上的 .button .clientX .clientY .pageX .pageY .screenX .screenY
    修改键(快捷键)属性 .shiftKey .ctrlKey .altKey .metaKey
    加在键盘事件上的 keydown keyup keypress

  • 相关阅读:
    接口测试(基础知识)
    MapReduce的方式进行HBase向HDFS导入和导出
    HBase的JavaAPI操作
    Maven中settings.xml的配置项说明
    Eclipse使用Maven创建普通Java工程时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart:RELEASE from any of the configured repositories.
    ip 子网掩码 网关 DNS
    IP地址,子网掩码、默认网关,DNS理论解释
    IP地址,子网掩码,默认网关,路由,形象生动阐述
    Hive的JDBC使用&并把JDBC放置后台运行
    Hive中自定义函数
  • 原文地址:https://www.cnblogs.com/taohuaya/p/9609115.html
Copyright © 2011-2022 走看看