1

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

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

1 回答 1

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

于 2013-01-13T02:37:06.680 回答