Javascript 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

我是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, 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();
    });