使用本地变量调用onclick

时间:2012-01-19 00:55:30

标签: javascript google-closure

首先,道歉,在某处(我一直在寻找!)

我想这样做:

var i;
for (i = 0; i < 5; i++) {
  ...
  // Add an anchor to the dom
  ...
  a.onclick = goog.bind(this.doSomething, this);
  ...
}

namespace.Clazz.prototype.doSomething = function(event, index) {
  console.log('index: ' + index);
}

我想要5个锚点,每个锚点在idoSomething时都会被点击(与点击事件一起)。我还想在this中保留doSomething的上下文(因此绑定)。

3 个答案:

答案 0 :(得分:1)

a.onclick = (function(i) { return function() {goog.bind.....}; })(i);

这会创建一个新的闭包,其中i的值是固定的。

答案 1 :(得分:1)

如果您可以撤销收到参数的顺序,您应该可以这样做......

a.onclick = goog.bind(this.doSomething, this, i);

所以你的doSomething应该是这样的......

namespace.Clazz.prototype.doSomething = function(index, event) {
  console.log('index: ' + index);
};

至少从the Google Closure Library source看它的样子。

答案 2 :(得分:0)

这样的事情对你来说可能会更好:

a.onclick = function() {
    doSomething(this, i)
}