2012-04-20 21 views
1

我在长时间使用jQuery后第一次使用Closure。在Closure上创建一个listner到多个元素

我在为getElementsByClass()获取的多个对象创建侦听器时遇到了问题。任何想法如何我可以做到这一点在关闭?

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

我收到以下错误上面的代码:

遗漏的类型错误:对象#有没有方法“的attachEvent”

编辑:我用下面的代码这方面的工作。不过,我也不太清楚,如果这是这样做的最有效的方法:你没有使用任何地方封在你的代码提供

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'); 
     } 
    ); 
} 

你可以阅读更多有关闭的位置:https://stackoverflow.com/a/12931785/783743

你可以阅读有关的性能提升秘诀在这里:http://jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas