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 で動作します (イベントは 5 秒後に削除されます)。たぶん、テストケースにエラーがありますか?テストケースを見せてもらえますか?

=== UPDTAE ===

javascript では、同じパラメーターとコンテンツを持っている場合でも、関数は決して同じではありません。試してみてください:alert(function(){alert('Hi There');} == function(){alert('Hi There');});結果はfalseです。

機能への敬意は、それらが同じ機能に敬意を払う場合、同等です。そうvar fn = function() { alert('clicked'); }; alert(fn == fn);ですtrue

私の例のように、 bindEventand関数の関数には同じ参照を使用する必要があります。removeEvent

于 2012-04-20T06:22:20.900 に答える
0

純粋な JavaScript コードですべてのブラウザーをサポートするのは少し難しいです。JavaScript フレームワークを使用する方がはるかに優れています。最高の 1 つはJQueryだと思います。もちろん、他の多くのフレームワーク用に設計されています。さまざまな目的。

于 2012-04-20T05:45:59.077 に答える
0

クロスブラウザーのサポートには jQuery を使用します。.bindを使用してイベントをアタッチし、unbindを使用してデタッチするだけです。

于 2012-04-20T06:23:13.723 に答える