1

長い間jQueryを使用した後、初めてClosureを使用しています。

getElementsByClass()から取得した複数のオブジェクトのリスナーを作成する際に問題が発生します。閉鎖でそれをどのように行うことができるか考えていますか?

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

上記のコードで次のエラーが発生します。

Uncaught 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');
          }
       );
  }
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 に答える