0

我有点困惑,当我尝试在 IE7、IE9、Chrome 18、Firefox 12 中将函数绑定到事件(如点击)时效果很好,但是当我尝试删除事件的关联函数时,只有 IE7和 Firefox 能够解除附加功能。这是我正在使用的代码,我做错了什么?

    bindEvent:function(el,evtType,fn){

            if(el.addEventListener){
                el.addEventListener(evtType,fn,false);
            } else {
                if(el.attachEvent){


                  var _el=el;
                   var f = function(){fn.call(_el,window.event);}
                   el.attachEvent( 'on'+evtType, f);
                   el[fn.toString()+evtType]=f;


                    //el.attachEvent('on'+evtType,fn) ;

                } else {

                    el['on'+evtType]=fn;
                }
            }

    return el;

    },

    removeEvent: function(el,evtType, fn ) {

        if( el.removeEventListener){
            el.removeEventListener( evtType, fn, false );
        }else if(el.detachEvent){
            el.detachEvent('on'+evtType,el[fn.toString()+evtType]);
            el[fn.toString()+evtType]=null;


        }else{

            el['on'+evtType]=function(){};

        }

        return el;
    }

我的测试代码是:

var a = document.getElementById('just_a_div');
bindEvent(a,'click',function(){alert('Hi There');});

并尝试删除我使用几乎相同的:

removeEvent(a,'click',function(){alert('Hi There');});

任何可以在所有浏览器上有效执行此任务的想法或一些预制片段?希望有解决办法,万分感激。

4

3 回答 3

1

您的代码在的 IE8、firefox 和 chrome 示例中有效(该事件将在五秒钟后被删除)。也许您的测试用例中有错误?你能告诉我们你的测试用例吗?

=== UPDTAE ===

在 javascript函数中,当它们具有相同的参数和内容时,它们也永远不会相同。尝试:alert(function(){alert('Hi There');} == function(){alert('Hi There');});结果是false

对功能的尊重是平等的,如果它们对同一功能的尊重。var fn = function() { alert('clicked'); }; alert(fn == fn);也是如此true

您应该像在我的示例bindEvent中一样,在and函数中使用对函数的相同引用。removeEvent

于 2012-04-20T06:22:20.900 回答
0

用纯 javascript 代码支持所有浏览器有点困难,更好的方法是使用 javascript 框架,我认为最好的方法之一是JQuery,当然还有很多其他框架是为不同的目的。

于 2012-04-20T05:45:59.077 回答
0

使用 jQuery 实现跨浏览器支持。您可以简单地使用.bind附加事件并使用unbind分离它。

于 2012-04-20T06:23:13.723 回答