比如说<div id="main" onclick="whoami()"></div>中有个onclick绑定了whoami方法,我知道有id="main"这个元素,但是我不知道onclick或者onmouseover之类的(行为更表现是分离的),我要怎么获取这个元素绑定了些什么方法,通过什么绑定的。一时想到的这个问题,自己没有想到怎么做,希望高手指点下.谢谢!

解决方案 »

  1.   

    这个问题还是挺好的,有时会需要。在不知道绑了什么时,定点去提,肯定是自相矛盾的。那样的话,一般就是遍历了,可以举出一个目标对象的所有属性和方法,检测是否有值,并根据值的情况进行报告。比如onclick这种事件,只有两种情形,一是onclick="javascript:直接写执行代码",二是onclick="javascript:theforever_csdn()"或者onclick="theforever_csdn()"。都可以通过字串操作来鉴别。
      

  2.   

    列出事件和属性的方法,可以参考这个
    http://blog.csdn.net/theforever/article/details/6029382
      

  3.   

    我是通过addEventlistener绑定的事件怎么去取呢?
      

  4.   

    下面是个办法,但只能获取顶级事件。事件内嵌套的无法获取到;
    <script type="text/javascript">
    function getDomEvent(o){
        var a="blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(' ');
        var b=[];
        for(var i=0;i<a.length;i++){
            if(o['on'+a[i]] || o.getAttribute('on'+a[i])){
                b.push(a[i]);
            }
        };
        return b;
    };
    window.onload=function(){
        var o=document.getElementById("test");
        o.onclick=function(){
            alert('1');
        };
        o.onblur=function(){
            alert('1');
        }
        var b=getDomEvent(o);
        alert(b);//绑定的事件列表
    }
    </script>
    <input type="text"  id="test" value="1" onfocus="alert('xxx')"/>
      

  5.   

    能获取dom内绑定的事件,但是addEventListener绑上的事件还是无法获取的到么
      

  6.   


    重写 addEventlistener 
    这样我就可以收集 我想要的信息  和做点预处理
      

  7.   

    <script type="text/javascript">
    function addEvent(dom,type,fn) {
        if(document.addEventListener) {
            dom.addEventListener(type, fn, false);
        } else if(document.attachEvent) {
            dom.attachEvent('on' + type, fn);
        } else {
            dom['on' + type] = fn;
        };
        dom["Listener-"+type]=!0;
    }function getDomEvent(o){
        var a="blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(' ');
        var b=[];
        for(var i=0;i<a.length;i++){
            if(o['on'+a[i]] || o["Listener-"+a[i]] || o.getAttribute('on'+a[i])){
                b.push(a[i]);
            };
        };    return b;
    };
    function x(){
        alert('1')
    }
    window.onload=function(){
        var o=document.getElementById("test");
        o.onclick=function(){
            alert('1');
        };
        o.onblur=function(){
            alert('1');
        };
        addEvent(o,'mouseover',x);//使用这种方式去临听事件    var b=getDomEvent(o);
        alert(b);//绑定的事件列表
    }
    </script>
    <input type="text"  id="test" value="1"/>
      

  8.   

    这个我也知道,但是你运行下你会发现少了onmouseover,我就是想知道怎么获取addEvent添加的事件(这里的onmouseover)。
      

  9.   

    “你运行下你会发现少了onmouseover“
    什么意思?我上面的例子,输出的是:blur,click,mouseover
    不是这三个事件么?
      

  10.   

    你自己看仔细,我前面加多了个addEvent函数去处理监听事件的绑定,以及记录监听事件。并不是第一次发的那些代码了
    function addEvent(dom,type,fn) {
        if(document.addEventListener) {
            dom.addEventListener(type, fn, false);
        } else if(document.attachEvent) {
            dom.attachEvent('on' + type, fn);
        } else {
            dom['on' + type] = fn;
        };
        dom["Listener-"+type]=!0;
    }
      

  11.   

    木有看到dom["Listener-"+type]=!0;,这样的确可以。