2011-06-17 12 views
1

私は基本的な機能を持つJavascriptライブラリを開発しています。このJavascriptライブラリの互換性を改善するにはどうすればよいですか?

私はJavascriptをかなり使い慣れていて、主に自己改善のためにjQueryを自分自身から離しています。

私の目標は、IE 8以降と互換性のあるJavaScriptライブラリを用意することです。そのため、ブラウザ固有の問題点を探しています。

そして残り:

一つの具体的な問題は、私はFirefoxの4

に1つのセレクタに複数のイベントを追加しようとすると、ここで問題になっているモジュールがあります動作するようには思えない私のイベントモジュールであり、図書館のgithubのである:https://github.com/timw4mail/kis-js/blob/master/kis.js

(function(){ 

    var attach, remove, add_remove, e; 

    if(document.addEventListener) 
    { 
     attach = function(sel, event, callback) 
     { 
      if(sel.addEventListener) 
      { 
       sel.addEventListener(event, callback, false); 
      } 
     }; 

     remove = function(sel, event, callback) 
     { 
      if(sel.removeEventListener) 
      { 
       sel.removeEventListener(event, callback, false); 
      } 
     }; 
    } 
    else 
    { 
     attach = function(sel, event, callback) 
     { 
      if(sel.attachEvent) 
      { 
       sel.attachEvent("on"+event, callback); 
      } 
     }; 

     remove = function(sel, event, callback) 
     { 
      if(sel.detachEvent) 
      { 
       sel.detachEvent("on"+event, callback); 
      } 
     }; 
    } 

    add_remove = function (sel, event, callback, add) 
    { 
     var i,len; 

     if(!sel) 
     { 
      return false; 
     } 

     //Get the DOM object if you give me a selector string 
     if(typeof sel === "string") 
     { 
      sel = $(sel); 
     } 

     //Multiple events? Run recursively! 
     event = event.split(" "); 

     if(event.length > 1) 
     { 
      console.log(event); 

      len = event.length; 

      for(i=0;i<len;i++) 
      { 
       add_remove(sel, event[i], callback, add); 
      } 

      return; 
     } 

     //Check for multiple DOM objects 
     if(sel.length > 1) 
     { 
      len = sel.length; 
      for(i=0;i<len;i++) 
      { 
       (add === true) 
        ? attach(sel[i], event, callback) 
        : remove(sel[i], event, callback); 
      } 
     } 
     else 
     { 
      (add === true) 
       ? attach(sel, event, callback) 
       : remove(sel, event, callback); 
     } 
    }; 

    e = { 
     add: function(sel, event, callback) 
     { 
      add_remove(sel, event, callback, true); 
     }, 
     remove: function(sel, event, callback) 
     { 
      add_remove(sel, event, callback, false); 
     } 
    }; 

    window.$_.event = e; 

}()); 
+0

を記述する必要があります代わりに、クリックのことから、(attachHandlerで)IE8のための様々なイベントを使用する必要がjsfiddleを持つことになります。http:/ /jsfiddle.net/NbDnX/1/ – Na7coldwater

+0

ありがとう、特定の問題を表示するように更新しました。 – timw4mail

+0

あなたはjsfiddleを更新しましたか?私はそれを見るために新しいバージョンへのリンクが必要です。 – Na7coldwater

答えて

1

さて、検索のしばらく後、私はこの問題は、すべてであなたのライブラリーではありませんが、テストコードである見つけました。問題は、innerTextがFirefox 4では動作しないということです。your test codeのバージョンは、innerTextの代わりにinnerHTMLを使用するように更新されています。

sel.addEventListener(event, callback, false); 

sel.removeEventListener(event, callback, true); 

が彼らの第三引数のパラメータを一致している必要があります。

はまた、あなたのライブラリーは、私は、私が指摘しなければならないと思ったいくつかの他の互換性の問題があります。 MDC wikiから

引用:

リスナーは、それぞれが個別に削除する必要があり、二回のキャプチャと1つずつ無しに登録された場合。キャプチャ・リスナーの削除は、同じリスナーの非キャプチャ・バージョンには影響しません。また、その逆もあります。

もが、(以下IE8またはのために)別の互換性の事:attachEventを使用すると、イベント名の前に、そのような "上" を持つことを期待:。element.attachEvent("onmouseover", function(){...});

+0

これは知っておくと便利ですが、私が持っていた問題はイベントを付けることでした。ありがとう。 – timw4mail

+0

これらの変更で完全なソースを更新しました。入力いただきありがとうございます。 – timw4mail

+0

これで、問題はあなたのコードではなく、 'innerText'にありました。 – Na7coldwater

0

ウィンドウ$エラーを返し.event 、あなたはwidnow意味でした。= E $を、あなたが関数の範囲外

$_.add(document.getElementById('test'), 'click', function(){ alert(1); }); 

を(追加と削除)を使用することができるように?

また、あなたは、あなたは、のonclickなどの代わりに、焦点のONFOCUS、ここで

+0

私は$ _が彼の図書館のどこかで定義されていると思います。 – Na7coldwater

+0

ええ、私は$ _と$を他のところで定義します。 $はセレクタ関数、$ _はメインライブラリ変数です。 – timw4mail

+0

ああ、大変申し訳ありません – Pantelis

関連する問題