使用局部变量调用 onclick

发布于 2024-12-27 18:37:48 字数 466 浏览 1 评论 0原文

首先,我很抱歉问了一些必须在此处回答的问题(我一直在寻找!)

我想这样做:

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 个锚点,每个锚点将 i 的不同值传递给 doSomething 单击时(以及单击事件)。我还想将 this 的上下文保留在 doSomething 中(因此是绑定)。

First, apologies for asking something that must be answered here somewhere (I've been looking!)

I want to do this:

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);
}

I want 5 anchors the each pass a different value for i to doSomething when clicked (along with the click event). I also want to keep the context of this in doSomething (hence the bind).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

哆啦不做梦 2025-01-03 18:37:48

如果您可以颠倒接收参数的顺序,您应该能够执行此操作...

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

因此您的 doSomething 应该如下所示...

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

至少从 Google Closure 库源代码

If you can reverse the order that the arguments are received, you should be able to do this...

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

So your doSomething should look like this...

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

At least that's how it looks from the Google Closure Library source.

木槿暧夏七纪年 2025-01-03 18:37:48
a.onclick = (function(i) { return function() {goog.bind.....}; })(i);

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

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

That creates a new closure in which the value of i is fixed.

鯉魚旗 2025-01-03 18:37:48

像这样的东西可能更适合你:

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

Something like this may work better for you:

a.onclick = function() {
    doSomething(this, i)
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文