【发布时间】:2013-07-22 22:26:28
【问题描述】:
我很难理解和使用闭包(是的,我已阅读 How do JavaScript closures work?)
我的问题如下:
for (row = 0; row < 10; row++) {
for (column = 0; column < 10; column++) {
var target = $("#" + Data.Row[row].Column[column].ID);
target.mouseenter(function () {
var position = CalculatePosition($(this));
alert("row:" + row + ",column:" + column);
...
});
}
}
正如您所料,只要目标鼠标悬停在行和列上,行和列始终为 9。那么我的问题是,如何冻结行和列的值,以便 mouseevent 匿名函数可以获得它们的预期值?我尝试做类似的事情
target.mouseenter(function() {}.bind(column));
这似乎只适用于列,但当然this 不再指代目标。
【问题讨论】:
-
不,
bind做了一些你不能在这里使用的不同的事情(另请阅读about thethiskeyword) -
@Bergi 他可以使用
bind喜欢:function(row, column){}.bind(target, row, column)。 -
我怀疑你想让函数知道点击了哪个元素,每个元素都有不同的 ID。是吗?
-
@Paulpro:啊,没有看到他已经知道处理程序之外的
this/target[0]。至少不适用于更大的收藏......
标签: javascript jquery closures