Javascript 为闭包上的多个元素创建列表生成器

Javascript 为闭包上的多个元素创建列表生成器,javascript,events,closures,Javascript,Events,Closures,在使用jQuery很长时间之后,我第一次使用闭包 我在为从getElementsByClass获得的多个对象创建侦听器时遇到问题。你知道我该怎么做吗 goog.events.listen( goog.dom.getElementsByClass('clone'), goog.events.EventType.CLICK, function(e) { alert('hi'); } ); 对于上述代码,我得到以下错误: 未

在使用jQuery很长时间之后,我第一次使用闭包

我在为从getElementsByClass获得的多个对象创建侦听器时遇到问题。你知道我该怎么做吗

  goog.events.listen(
      goog.dom.getElementsByClass('clone'),
      goog.events.EventType.CLICK,
      function(e) {
          alert('hi');
      }
  );
对于上述代码,我得到以下错误:

未捕获的TypeError:对象没有方法“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');
          }
       );
  }

在提供的代码中,您没有在任何地方使用闭包。如果需要最高效的代码,则应将常用属性存储在局部变量中:

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');
        }
    );
}
您可以在此处阅读有关闭包的更多信息:

您可以在此处阅读有关提高性能的提示: