JS事件对象

概念

当某个对象触发了某种事件时,所发生的一切详细信息保存在一个临时的地方,这个地方叫做事件对象(黑匣子)

获取事件对象

要考虑兼容
标准浏览器:通过事件触发函数的第一个形参获得
arguments:伪数组,接收函数调用时所传递的所有实参
IE9以下:通过内置的全局对象window.event获得

兼容:
oDiv.onclick = function(event){
var e = event || window.event;
};

使用事件对象

获取鼠标按键的编码
event.button
oDiv.onmousedown = function(event){
    //var e = event || window.event;
    //console.log(e.button);

    console.log(getButton(event));
};
//兼容
function getButton(event){
    var e = event || window.event;
    if(e){
        return e.button;
    } else if(window.event) {
        switch(e.button){//  IE左中右键值为 1 4 2
            case 1:return 0;
            case 4:return 1;
            case 2:return 2;
        }
    }
}
获取鼠标坐标值

可视区坐标值
event.clientX, event.clientY
相对坐标值
event.offsetX, event.offsetY
绝对坐标值(页面坐标值)
event.pageX, event.pageY
屏幕坐标值
event.screenX, event.screenY

获取键盘的编码
onkeydown/onkeyup  //监听整个键盘
    event.keyCode  //字母的大写的值
onkeypress
    event.keyCode //火狐返回0,google和IE可区分字母大小写
    event.charCode, event.which//火狐,google可区分大小写,IE不识别
兼容
oDiv.onkeypress = function(event){
    var e = event || window.event;
    var keyValue = e.keyCode || e.charCode || e.which;
    return keyValue;
}

组合键(表示按住这些键的同时)
event.ctrlKey, event.shiftKey, event.altKey
demo:

document.onclick = function(event){
  event = event || window.event;
  if(event.ctrlKey){
    alert("hello");//按住 ctrl 的时候点击鼠标  
  }
};
document.onkeydown = function(event){
  event = event || window.event;
  var key = event.keyCode || event.charCode || event.which;
  if(event.shiftKey && event.key == 13){
    alert("你同时按下了shift 和 enter(回车)");
  }
};

事件流(系统默认采用事件冒泡)

事件捕获(IE,opera不支持)

由祖先节点依次向他的子节点依次传递事件的过程

事件冒泡

由子节点一次向他的祖先节点传递事件的过程,成为事件冒泡,如果那个祖先节点有事件触发函数,则执行该函数。具体表现为,我在一个子元素上添加了一个点击事件,他的所有父级元素上也都添加了点击事件,当我点击这个子元素的时候,程序会依次从子元素逐级向上调用点击事件。下面的 demo 里会依次弹出:btn , box , body

阻止事件冒泡

e.stopPropagation();//只有标准能用
e.cancelBubble = true;//都能用
demo:

<div id="box">
    <input id="btn" type="button" >
</div>
<script type="text/javascript">
    /*
    事件冒泡
    清除事件冒泡:
    e.stopPropagation();IE不能用
    e.cancelBubble();都能用,但还是要做兼容(滑稽~)
    e.cancelBubble?e.cancelBubble = true : e.stopPropagation();
     */
    var btn = document.getElementById("btn");
    var box = document.getElementById("box");
    btn.onclick = function(event){

        var e = event || window.event;
        //e.cancelBubble = true;
        //e.stopPropagation();
        e.cancelBubble?e.cancelBubble = true : e.stopPropagation();
            alert("btn");
        };
        box.onclick = function(){
            alert("box");
        };
        document.body.onclick = function(){
            alert("body");
    };

</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 事件对象 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。包括导致...
    落花的季节阅读 1,459评论 0 1
  • 在触发DOM上的某个事件时,会产生一个事件对象event。这个对象中包含着所有与事件有关的信息。包括导致事件的元素...
    Miss____Du阅读 10,497评论 0 7
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 5,245评论 0 8
  • 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。 DOM中的事件对...
    FeRookie阅读 2,507评论 0 3
  • 作为一名军人妻,有人说这是一种隐形单亲。尝试着和军人去沟通,说说内心感受,可是几个轮回下来,手机发烫,对方却没有任...
    涅般木阅读 1,846评论 3 3

友情链接更多精彩内容