Javascript jQuery仅保存在事件内部的最后一个值
我是jQuery新手,试图理解下面代码中发生了什么Javascript jQuery仅保存在事件内部的最后一个值,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我是jQuery新手,试图理解下面代码中发生了什么 var data = {1, 2, 3, 4}; for (var key in data) { $("#id"+key).click(function() { $(".class"+key).hide(); }); } 当我运行此代码时,无论单击哪个id,它都将隐藏class4。为什么会出现这种行为 另外,如何使id1隐藏类1、id2隐藏类2等等 谢谢你试试这个 var data = { 1: 1, 2: 2
var data = {1, 2, 3, 4};
for (var key in data) {
$("#id"+key).click(function() {
$(".class"+key).hide();
});
}
当我运行此代码时,无论单击哪个id,它都将隐藏class4。为什么会出现这种行为
另外,如何使id1隐藏类1、id2隐藏类2等等
谢谢你试试这个
var data = { 1: 1, 2: 2, 3: 3, 4: 4 };
for (var key in data) {
$("#id" + key).click(function () {
$(".class" + this.id.substr(this.id.toString().length - 1, 1)).hide();
});
}
事实上,问题是
var data={1,2,3,4}代码>确实无效
$(“.class”+键)
在运行时在单击
事件时进行求值,此时键
保持4
这是最后分配给它的值,因此它是错误的。因此,您应该在运行时从clicker的id
本身获取该数值而且不需要闭包。这看起来不像是有效的JS。如果
data
是一个对象,那么值在哪里?如果数据
是一个数组,那么你应该使用括号[]
,并将用于
循环,而不是用于
中的…它可能没有1,2,3,4那么简单,因此OP在键入一段伪数据的内容时可能犯了一个键入错误,因此我们可以专注于逻辑。好眼力哈哈,我完全错过了。
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])
}
$("#id"+key).click(function() {
var className = ".class" + $(this).prop("id").replace("id", "");
$(className).hide();
});