function AttachEvent(type, target, handler, owner)
{
        var eventHandler = handler;
    if(owner)
    {
            // 在这里重新定义一个处理函数
            eventHander = function(e)
            {
                    handler.call(owner, e);
            }
    }
    if(window.document.all)
            target.attachEvent("on" + type, eventHander );
    else
            target.addEventListener(type, eventHander, false); //注意这里第一个参数是click而不是onclick
}
这段代码 是我从网上看到的 虽然不是很明白 但一直用着挺好用的可是最近遇到个问题,在用这个方法对对象进行绑定事件之后,在解除事件时 就遇到问题了,个人理解是 在绑定时 由于我都传入了owner这个参数 于是他又对事件进行了 处理 这样绑定上的并不是 传入的那个handler于是乎解除时变失灵了哪位告示指点一下小弟呀 我想要的结果是 用这个绑定事件 并能有对应的解除事件方法
谢谢了

解决方案 »

  1.   

    试了一下这个应该可以function AttachEvent(type, target, handler, owner)
    {
            var eventHandler = handler;
        if(owner)
        {
                // 在这里重新定义一个处理函数
                eventHander = function(e)
                {
                        handler.call(owner, e);
                }
        }
        if(window.document.all)
                target.attachEvent("on" + type, eventHander );
        else
                target.addEventListener(type, eventHander, false); //注意这里第一个参数是click而不是onclick
        return(eventHander);
    }
    var re=AttachEvent('click',document.body,function() {alert("") },1);
    document.body.detachEvent('onclick',re);
      

  2.   

    var r1=AttachEvent('click',document.body,function() {alert("a") },1);
    var r2=AttachEvent('click',document.body,function() {alert("b") },1);
    document.body.detachEvent('onclick',r1);
    document.body.detachEvent('onclick',r2);
    不过要保存每个添加的事件返回的eventHander
      

  3.   

    Firefox中不支持 document.all。函数使用这个特性来区别是不是ie。ie 和其他的浏览器的绑定方式不一样。具体自己google 一下吧。不太明白解绑的意思:这样呢?
    document.getElementById("test").onclick = null;
      

  4.   

    3楼:
        if(window.document.all)
                target.attachEvent("on" + type, eventHander );
        else
                target.addEventListener(type, eventHander, false);这段函数本来就是用来区分ie和ff等浏览器进行分别处理的,还用google么另外=null不能取出attachEvent addEventListener添加的函数