zoukankan      html  css  js  c++  java
  • javascript Event事件

    开发过程中经常用到js的相关事件,但一直没有系统的学习下,总觉着心里不踏实。今天清明节没事,正好查查资料整理了下。

    首先粘贴出搜来的,写的已经比较详细了。后面是我自己测试验证的一点东西。

    event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。
    event对象只在事件发生的过程中才有效。
    event的某些属性只对特定的事件有意义。比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout 事件有意义。
    例子下面的例子检查鼠标是否在链接上单击,并且,如果shift键被按下,就取消链接的跳转。
    <SCRIPT LANGUAGE="JScript">
    function cancelLink() {
        if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
        window.event.returnValue = false;
    }
    </SCRIPT>
    <BODY onclick="cancelLink()">


    属性:
    altKey, button, cancelBubble, clientX, clientY, ctrlKey, fromElement, keyCode, offsetX, offsetY, propertyName, returnValue, screenX, 
    screenY, shiftKey, srcElement, srcFilter, toElement, type, x, y

    1.altKey
    描述:
    检查alt键的状态。

    语法:
    event.altKey

    可能的值:
    当alt键按下时,值为 TRUE ,否则为 FALSE 。只读。

    2.button
    描述:
    检查按下的鼠标键。

    语法:
    event.button

    可能的值:
    0 没按键
    1 按左键
    2 按右键
    3 按左右键
    4 按中间键
    5 按左键和中间键
    6 按右键和中间键
    7 按所有的键

    这个属性仅用于onmousedown, onmouseup, 和 onmousemove 事件。对其他事件,不管鼠标状态如何,都返回 0(比如onclick)。

    3.cancelBubble
    描述:
    检测是否接受上层元素的事件的控制。

    语法:
    event.cancelBubble[ = cancelBubble]

    可能的值:
    这是一个可读写的布尔值:

    TRUE 不被上层原素的事件控制。
    FALSE 允许被上层元素的事件控制。这是默认值。

    4.clientX
    描述:
    返回鼠标在窗口客户区域中的X坐标。

    语法:
    event.clientX

    注释:
    这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。

    5.clientY
    描述:
    返回鼠标在窗口客户区域中的Y坐标。

    语法:
    event.clientY

    注释:
    这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。

    6.ctrlKey
    描述:
    检查ctrl键的状态。

    语法:
    event.ctrlKey

    可能的值:
    当ctrl键按下时,值为 TRUE ,否则为 FALSE 。只读。

    7.fromElement
    描述:
    检测 onmouseover 和 onmouseout 事件发生时,鼠标所离开的元素。 参考:18.toElement

    语法:
    event.fromElement

    注释:
    这是个只读属性。

    8.keyCode
    描述:
    检测键盘事件相对应的内码。
    这个属性用于 onkeydown, onkeyup, 和 onkeypress 事件。

    语法:
    event.keyCode[ = keyCode]

    可能的值:
    这是个可读写的值,可以是任何一个Unicode键盘内码。如果没有引发键盘事件,则该值为 0 。

    9.offsetX
    描述:
    检查相对于触发事件的对象,鼠标位置的水平坐标

    语法:
    event.offsetX

    10.offsetY
    描述:
    检查相对于触发事件的对象,鼠标位置的垂直坐标

    语法:
    event.offsetY

    11.propertyName
    描述:
    设置或返回元素的变化了的属性的名称。

    语法:
    event.propertyName [ = sProperty ]

    可能的值:
    sProperty 是一个字符串,指定或返回触发事件的元素在事件中变化了的属性的名称。
    这个属性是可读写的。无默认值。

    注释:
    你可以通过使用 onpropertychange 事件,得到 propertyName 的值。

    12.returnValue
    描述:
    设置或检查从事件中返回的值

    语法:
    event.returnValue[ = Boolean]

    可能的值:
    true 事件中的值被返回
    false 源对象上事件的默认操作被取消

    例子见本文的开头。

    13.screenX
    描述:
    检测鼠标相对于用户屏幕的水平位置

    语法:
    event.screenX

    注释:
    这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。

    14.screenY
    描述:
    检测鼠标相对于用户屏幕的垂直位置

    语法:
    event.screenY

    注释:
    这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。

    15.shiftKey
    描述:
    检查shift键的状态。

    语法:
    event.shiftKey

    可能的值:
    当shift键按下时,值为 TRUE ,否则为 FALSE 。只读。

    16.srcElement
    描述:
    返回触发事件的元素。只读。例子见本文开头。

    语法:
    event.srcElement

    17.srcFilter
    描述:
    返回触发 onfilterchange 事件的滤镜。只读。

    语法:
    event.srcFilter

    18.toElement
    描述:
    检测 onmouseover 和 onmouseout 事件发生时,鼠标所进入的元素。 参考:7.fromElement

    语法:
    event.toElement

    注释:
    这是个只读属性。

    19.type
    描述:
    返回事件名。

    语法:
    event.type

    注释:
    返回没有“on”作为前缀的事件名,比如,onclick事件返回的type是click 只读。

    20. x
    描述:
    返回鼠标相对于css属性中有position属性的上级元素的x轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象。

    语法:
    event.x

    注释:
    如果事件触发后,鼠标移出窗口外,则返回的值为 -1
    这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置。

    21. y
    描述:
    返回鼠标相对于css属性中有position属性的上级元素的y轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象。

    语法:
    event.y

    注释:
    如果事件触发后,鼠标移出窗口外,则返回的值为 -1
    这是个只读属性。这意味着,你只能通过它来得到鼠标的当前位置,却不能用它来更改鼠标的位置

    avascript Event方法和属性讲解---------------------------------------

    Event属性和方法:

    type:事件的类型,如onlick中的click; 

    srcElement/target:事件源,就是发生事件的元素; 

    button:声明被按下的鼠标键,整数,1代表左键,2代表右键,4代表中键,如果按下多个键,酒把这些值加起来,所以3就代表左右键同时按下;(firefox中 0代表左键,1代表中间键,2代表右键) 


    clientX/clientY:事件发生的时候,鼠标相对于浏览器窗口可视文档区域的左上角的位置;(在DOM标准中,这两个属性值都不考虑文档的滚动情况,也就是说,无论文档滚动到哪里,只要事件发生在窗口左上角,clientX和clientY都是 0,所以在IE中,要想得到事件发生的坐标相对于文档开头的位置,要加上document.body.scrollLeft和 document.body.scrollTop) 

    offsetX,offsetY/layerX,layerY:事件发生的时候,鼠标相对于源元素左上角的位置; 

    x,y/pageX,pageY:检索相对于父要素鼠标水平坐标的整数; 

    altKey,ctrlKey,shiftKey等:返回一个布尔值; 

    keyCode:返回keydown何keyup事件发生的时候按键的代码,以及keypress 事件的Unicode字符;(firefox2不支持 event.keycode,可以用 event.which替代 ) 

    fromElement,toElement:前者是指代mouseover事件中鼠标移动过的文档元素,后者指代mouseout事件中鼠标移动到的文档元素; 

    cancelBubble:一个布尔属性,把它设置为true的时候,将停止事件进一步起泡到包容层次的元素;(e.cancelBubble = true; 相当于 e.stopPropagation();) 

    returnValue:一个布尔属性,设置为false的时候可以组织浏览器执行默认的事件动作;(e.returnValue = false; 相当于 e.preventDefault();) 

    attachEvent(),detachEvent()/addEventListener(),removeEventListener:为制定DOM对象事件类型注册多个事件处理函数的方法,它们有两个参数,第一个是事件类型,第二个是事件处理函数。在attachEvent()事件执行的时候,this关键字指向的是window对象,而不是发生事件的那个元素; 

    screenX、screenY:鼠标指针相对于显示器左上角的位置,如果你想打开新的窗口,这两个属性很重要。


    一些说明:

    event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等;

    event对象只在事件发生的过程中才有效。 

    firefox里的event跟IE里的不同,IE里的是全局变量,随时可用;firefox里的要用参数引导才能用,是运行时的临时变量。
    在IE/Opera中是window.event,在Firefox中是event;而事件的对象,在IE中是window.event.srcElement,在Firefox中是event.target,Opera中两者都可用。 
    下面两句效果相同
    var evt = (evt) ? evt : ((window.event) ? window.event : null);
    var evt = evt || window.event; // firefox下window.event为null, IE下event为null 

    IE中事件的起泡
    IE中事件可以沿着包容层次一点点起泡到上层,也就是说,下层的DOM节点定义的事件处理函数,到了上层的节点如果还有和下层相同事件类型的事件处理函数,那么上层的事件处理函数也会执行。例如, div 标签包含了 a ,如果这两个标签都有onclick事件的处理函数,那么执行的情况就是先执行标签 a 的onclick事件处理函数,再执行 div 的事件处理函数。如果希望的事件处理函数执行完毕之后,不希望执行上层的 div 的onclick的事件处理函数了,那么就把cancelBubble设置为true即可。

    这里是自己经过在IE9,firefox和chrome中测试后的一些总结:

    1:FireFox并没有 window.event ,所以在FireFox下编写事件处理函数稍微麻烦。如果要得到 event 对象,就必须要声明事件处理函数的第一个参数为event。

    2:FireFox不支持e.returnValue=false的形式。改用e.preventDefault()。

    3:FireFox不支持event.fromElement和event.toElement,event.srcElement属性,得我们手动兼容。不支持e.x和e.y属性,但是支持pageX和pageY属性。

      没有offsetX和offsetY属性,但e.layerX和e.layerY是火狐专用的,必须将事件源对象的position属性设置为relative。

    4:经测试发现IE9中也有event.target属性了,不仅仅是fireFox专有的。

    暂时就总结这些。以后得日事日毕,不能拖拉!!!

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/heaventear/p/2999406.html
Copyright © 2011-2022 走看看