zoukankan      html  css  js  c++  java
  • JS获取事件对象,获取事件的源对象(Firefox,IE) 拂晓风起

    做笔记,以防自己忘记~~ JS获取事件event,不同浏览器有不同的做法。

    例如IE下,在js函数中,通过window.event就可以获取,不必在函数中添加什么参数。

    也可以用Prototype或者JQuery等,它们有他们对事件的包装。还是使用JS库比较好,不然就有下边的麻烦

    Firefox要传递参数

    <head>
    <script>
    function click1(event,str1){
    alert(event
    +str1);

    }
    </script>
    </head>
    <body>
    <input type="button" id="abc" onclick="click1(event,'kenko');" value="click me"/>
    </body>

    IE不需要传递参数

    <head>
    <script>
    function click1(){
    alert(event.srcElement.value);
    }
    </script>
    </head>
    <body>
    <input type="button" id="abc" onclick="click1();" value="click me"/>
    </body>

    event.srcElement

    event.srcElement.id

    ================================================================================

    在IE下,event对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性.。

        解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.。同时注意event的 兼容性问题。 

    感觉这个挺好,可以捕获当前事件作用的对象,如event.srcElement.tagName可以捕获活动标记名称。
    注意获取的标记都以大写表示,如"TD","TR","A"等。所以把看过的一些抄下来,不记得的时候再来看看。

    <script type="text/javascript">
        function tdclick(){
            if(event.srcElement.tagName.toLowerCase()=='td')
                 alert("行:"+(event.srcElement.parentNode.rowIndex+1)+"列:"+(event.srcElement.cellIndex+1));
         }
    </script>

    event.srcElement从字面上可以看出来有以下关键字:事件,源     他的意思就是:当前事件的源,

    我们可以调用他的各种属性 就像:document.getElementById("")这样的功能,

    经常有人问 firefox 下的 event.srcElement 怎么用,在此详细说明:

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

    firefox 下的 event.target = IE 下的 event.srcElement

    解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.

    在 ie中处理事件直接使用window.event对象即可,但在firefox中,是没有 window.event对象的,函数需要使用事件的时候,需要在事件发生时把事件作为参数传递给函数,不象在ie中,事件对象是全局的,随处都可以访 问.下面这个getEvent()函数可以兼容firefox和ie,只需要在访问事件对象的函数的开始调用getEvent()即可,不用再把事件作为 参数传递.以下代码已经实验通过!

    function myfunc()
    {
    var evt=getEvent();
    var element=evt.srcElement || evt.target;
    }

    function getEvent()
    {
    if(document.all)
    {
    return window.event;//如果是ie
    }
    func=getEvent.caller;
    while(func!=null)
    {
    var arg0=func.arguments[0];
    if(arg0)
    {
    if((arg0.constructor==Event || arg0.constructor ==MouseEvent)
    ||(typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation))
    {
    return arg0;
    }
    }
    func=func.caller;
    }
    return null;
    }

    kenkofox@qq.com https://github.com/kenkozheng 欢迎投简历给我,一线大厂工作机会
  • 相关阅读:
    SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
    SPOJ GSS3 Can you answer these queries III ——线段树
    SPOJ GSS2 Can you answer these queries II ——线段树
    SPOJ GSS1 Can you answer these queries I ——线段树
    BZOJ 2178 圆的面积并 ——Simpson积分
    SPOJ CIRU The area of the union of circles ——Simpson积分
    HDU 1724 Ellipse ——Simpson积分
    HDU 1071 The area ——微积分
    HDU 4609 3-idiots ——FFT
    BZOJ 2194 快速傅立叶之二 ——FFT
  • 原文地址:https://www.cnblogs.com/kenkofox/p/1964700.html
Copyright © 2011-2022 走看看