2011-08-06 9 views
0

addEventListenerを以下のコードでapplyを呼び出しようとしていますが、Webkitのコンソールに "TypeError:Type error"が表示されています。WebkitのネイティブJavaScriptメソッドでapply/callを使用する

私は、このメソッドを呼び出すためには適用と呼び出しの両方を試みましたが、役に立たなかった。明白な何かを見逃しているか、私がまだ知らない何らかの理由で許可されていないことをしようとしていますか?

もう1つの記事ではこれについて少し話していますが、正確には私がどのようにそれを使って作業しようとしているのかは分かりません。 Using native code functions as JavaScript objects in WebKit。これは、その後、2つのイベントモデル間の他の違いを減らすために拡張することができ

addEvent = (function() { 
    return addEventListener ? 
    function (element, event, fn) { 
     element.addEventListener (event, fn, false); 
    } : 
    function (element, event, fn) { 
     element.attachEvent ('on' + event, fn); 
    }; 
})(); 

: -

+2

ここではいくつかの抽象概念を壊しています。 'window.addEventListener.apply(anElement、[...])'は 'anElement.addEventListener()'と同じであることが保証されていません。つまり、DOM APIは必須ではないホスト(os)言語仕様に合わせてください(つまり、仕様は異なります)。さらに、IEの* attachEvent *は、渡されたイベント名の接頭辞 'on"を必要とします。 –

+0

これは私の初めてのスタックへの投稿です。私はそれを大好きです。だから、私よりも賢く、喜んで助けてくれる人がいることに喜んでいる。 これを行うより良い方法は、次のようなものでしょうか。 要素[handler.name](event、fn、false); – kalisjoshua

答えて

1

(適切クレセントフラッシュで述べたように)これを達成する別の方法は次のとおりです。

+0

悪い考えではありませんが、返された関数の外側でifチェックを行うほうが良いと思いますので、一度しか評価されません。クロージャを利用して、 "on"変数を作成し、関数を返す前に変数を設定し、関数内で使用しました。 var on = handler.name === "attachEvent"? "on": "";次に、返された関数の中で:element [handler.name](on + event、fn、false);私は私が自宅で唯一のMacであるので、私はIEで動作するかどうかは不思議です。 – kalisjoshua

+0

kalisjoshua:あなたは大丈夫です。私はクロージャーコードを完成させました、今addEventは1つまたは他の内部関数の値を持っています。 – HBP

関連する問題