【问题标题】:Cloning JavaScript with for()使用 for() 克隆 JavaScript
【发布时间】:2013-01-13 01:29:58
【问题描述】:

例如,这是行不通的。我的错误是什么?

var i=1;
for(i; i <=165; i++){
    jQuery(".tekAlan"+i).click(function() {   
    jQuery(".tekAlan"+i).addClass("tekAlanSecildi");    
    });
}

谢谢。

【问题讨论】:

  • 您能否详细说明它是如何不起作用的?

标签: javascript jquery for-loop cloning


【解决方案1】:

您通过引用而不是值传递i,因此i 不是指您认为循环运行后的数字。看看this simple example,看看我的意思。

在这种情况下,您可能只使用属性选择器和this

jQuery('[class^="tekAlan"]').click(function() {   
    jQuery(this).addClass("tekAlanSecildi");    
});

如果您想修复当前代码,则必须使用匿名函数 shadow i

for(var i = 1; i <= 165; i++){
    (function(i) {
        jQuery(".tekAlan" + i).click(function() {   
            jQuery(".tekAlan" + i).addClass("tekAlanSecildi");    
        });
    })(i);
}

【讨论】:

  • 阴影变量的好例子。我也想知道如何在不使用“this”的情况下解决它,而您的代码可以解决问题。
  • 非常感谢您。 :)
  • 您确定只有.tekAlan165 可以点击吗?我认为他们都会收到点击事件,但是,他们都会再次将类添加到最后一个
【解决方案2】:

我猜您只想将类添加到单击的项目中。但是,它总是将类添加到最后一个。那是因为 i 是在 for 的末尾 之后访问的,所以它总是包含 165。这样做可以解决您的问题:

var i=1;
for(i; i <=165; i++){
    jQuery(".tekAlan"+i).click(function() {   
        jQuery(this).addClass("tekAlanSecildi");    
    });
}

jQuery(this) 是受事件影响的元素的引用(在本例中为click

【讨论】:

    【解决方案3】:

    虽然不是很清楚,但是你可以试试这样的

    1) 为所有元素添加一个类

    2)

    $('.someclass').click(function(){
    
        $(this).addClass('someotherclass');
    
    })
    

    你不需要 for 循环。

    【讨论】:

    • 在我的情况下是的,我愿意 :D 谢谢你的回答。
    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2013-01-03
    • 2015-02-12
    相关资源
    最近更新 更多