在Closure上创建多个元素的监听器

时间:2012-04-20 22:13:29

标签: javascript events closures

我在使用jQuery很长一段时间后第一次使用Closure。

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

1 个答案:

答案 0 :(得分: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