2011-01-18 3 views
0

でイベントを割り当てますイメージをクリックするたびにloadMainImage(imgPath)関数を起動しますか?は動的に私はjavascriptのクラスを以下しているjavascriptオブジェクト

ありがとうございます!

+0

loadMainImage' 'のあなたの宣言は無効です。おそらく、 'this.loadMainImage = function(imgPath){...}'が必要です。画像をクリックしたときに –

+0

'imgPath'パラメータは何でしょうか? – casablanca

+0

Brian DonovanのloadMainImage関数が固定されています – ihorko

答えて

2

現在の値this(これはImageGalleryオブジェクトを参照)をキャプチャし、loadMainImageonclickの範囲で呼び出す必要があります。このハンドラを失うのは簡単ですので、私は、(onclickのあなたの場合)のonEventのようなメソッドを使用して回避しよう

var self = this; 
img.onclick = function() { 
    self.loadMainImage(this.src); 
}; 
+0

このコードはおそらくリークする可能性があります... JavaScript関数はDOM要素としてimgを指します。これはonclickハンドラのJavaScriptの "self"変数を指しています...確かにわかりませんが、循環参照とテストする価値があるようですリーク – Maxym

+0

完璧に動作します!どうもありがとうございました! – ihorko

0

onclickの内部では、thisはそうthis.srcはあなたのイメージソースを与える、画像自体を指し(ちょうどどこかimg.onclickを書くことは、以前のハンドラをオーバーライドします。)(jQueryのような)いくつかのJavaScriptライブラリを使用する

試して、それが少なくとも少し開発を簡素化します。そして、バックあなたの質問に、私はそう書くとYUI 2を使用して:

var imgCount = ImgArr.length; // do not use ImgArr.length in for definition, it is better 
// to save it once and then use... otherwise each time in loop will look up ImgArr object to find length property 
for (var i = 0; i < imgCount; i++) { 
    var img = document.createElement("img"); 
    var src = ImgArr[i]; 
    img.scr = src ; 
    YAHOO.util.Event.addListener(img, "click", this.loadMainImage, src, this); 
} 

あなたはjQueryのか、他のフレームワークで同様の機能を見つけることができます。何それがない:
YAHOO.util.Event.addListener(obj, event, handler, argument, context)からeventと指定handlerため、objにイベントリスナーを付けます。 argument - 何そのハンドラに渡す、とcontextそのハンドラを実行する(あなたの場合にはそれだけでthisになります)

これを行うには、ちょうどあなたがあなたのページをアンロードする際にこのハンドラをunattachすることを忘れないでください(または何をするにしても)、例えばYAHOO.util.Event.removeListener(img, "click", this.loadMainImage)、または(YUIのpurgeElementのように)接続されているすべてのリスナーを削除する関数を呼び出します。はい、物事はあなたがimg.onclick = ...;を使用する場合、それについて世話をします。この場合、ブラウザでのように思える少し簡単です。

関連する問題