工作演示
var data = [1, 2, 3, 4];
for (var i = 0;i < data.length; i++) {
(function(key) {
$("#id"+key).click(function() {
$(".class"+key).hide();
});
})(data[i])
}
在您的 for each 循环中,闭包是由处理程序单击创建的,但它指向key
哪个在全局范围内。它被改变了。在我的代码中,关键点指向由附加函数包装创建的范围,.click
并key
在其中指向key
由该函数创建的范围,每次它都是新的
var data = {1, 2, 3, 4};
- 这不是有效的对象定义。它应该是这样的:
var data = {key:"value", key2:"value",...};
上面的示例也适用于正确指定的对象。只是不要忘记您还应该key
像这样测试变量:
if(data.hasOwnProperty(key)) {...}
为了过滤掉.toString
等.valueOf
(默认对象方法)
或者像一种解决方法 - 您始终可以key
从单击的元素 ID 构建类名。
$("#id"+key).click(function() {
var className = ".class" + $(this).prop("id").replace("id", "");
$(className).hide();
});
并且不需要关闭。