2012-04-20 18 views
1

jQueryを長時間使用して初めてClosureを使用しています。閉鎖時に複数の要素にリスナーを作成する

getElementsByClass()から取得する複数のオブジェクトのリスナーを作成する際に問題があります。どのように私は閉鎖でそれを行うことができますか?

goog.events.listen(
     goog.dom.getElementsByClass('clone'), 
     goog.events.EventType.CLICK, 
     function(e) { 
      alert('hi'); 
     } 
); 

は、私は上記のコードのために、次のエラーを取得:

キャッチされない例外TypeError:オブジェクト#は何のメソッド 'attachEvent'

EDITを持っていない:私は、次のコードによって、この作業を得ました。

var clone_buttons = goog.dom.getElementsByClass('clone'); 
    for (var i = 0; i < clone_buttons.length; i++) { 
     goog.events.listen(
      clone_buttons[i], 
      goog.events.EventType.CLICK, 
      function(e) { 
       alert('hi'); 
      } 
     ); 
    } 

答えて

0

あなたが提供されたコード内の任意の場所にクロージャを使用していない:これはそれを行うための最も効率的な方法がある場合しかし、私は、あまりにもよく分かりません。あなたが最も効率的なコードを望むなら、あなたはローカル変数で一般的に使用されるプロパティを格納する必要があります

var clone_buttons = goog.dom.getElementsByClass('clone'); 
var length = clone_buttons.length; 
var events = goog.events; 
var CLICK = events.EventType.CLICK; 

for (var i = 0; i < length; i++) { 
    events.listen(
     clone_buttons[i], 
     CLICK, 
     function(e) { 
      alert('hi'); 
     } 
    ); 
} 

あなたがここに閉鎖についての詳細を読むことができます:http://jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas

:あなたがここにパフォーマンス高めるヒントについて読むことができます https://stackoverflow.com/a/12931785/783743

関連する問題