javascript - for 循环和动画,不能使用变量,因为由于关闭而改变

标签 javascript jquery scope

我有这个代码:

   var newTR = '<tr class=".small"></tr>';
   var i=300, v=0;

    for (var product in products){
        i=i+300;
        v++;

        var newTD+v =
            '<td>'+'img'+'</td>'+
                '<td>'+products[product].partNumber + ' ' + products[product].description+'</td>'+
                '<td class="productPrice">' + toDollars(products[product].price) + '</td>'+
                '<td class="productQty">'+products[product].qty+'</td>'+
                '<td>'+ products[product].price * products[product].qty+'</td>'+
                '<td><button class="removeProductClass">x</button></td>';

        $(newTR)
            .delay(i)
            .insertAfter(self.cartTableHeader)
            .switchClass( "small", "big", 500, "easeInOutQuad")
            .queue(function(){
                $(this).append(newTD)
                    .children()
                    .hide()
                    .fadeTo(1000, 1);
                    $(this).dequeue();
                })
            .queue(function(){
                self.calcSubTotal();
                $(this).dequeue();
                });


    }
}

问题是我最终得到了 newTD 变量的相同值 因为闭包使用的是在 newTD 上设置的最后一个值 由于动画稍后发生,当 for 循环已经完成时..

如何克服这一点? :(

感谢阅读,

肖恩。

最佳答案

将有问题的代码包装在一个自执行函数中,如下所示:

       (function(newTD){
          $(newTR)
            .delay(i)
            .insertAfter(self.cartTableHeader)
            .switchClass( "small", "big", 500, "easeInOutQuad")
            .queue(function(){
                $(this).append(newTD)
                    .children()
                    .hide()
                    .fadeTo(1000, 1);
                    $(this).dequeue();
                })
            .queue(function(){
                self.calcSubTotal();
                $(this).dequeue();
                });
       })(newTD);

关于javascript - for 循环和动画,不能使用变量,因为由于关闭而改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344036/

相关文章:

javascript - 在javascript中输出以下代码的原因是什么

javascript - 使用全局变量从 Javascript 中的同一函数调用函数

javascript - 不同状态的 mustache 模板

javascript - jQuery,切换菜单项

javascript - Jquery.Validate 表单顶部的错误消息

java - session 范围的 bean 作为 Spring MVC Controller 的类属性

azure - 如何使用 Terraform 在管理组范围上定义和分配 Azure 策略?

javascript - jQuery下拉菜单切换问题

javascript - 如何将 Twitter Bootstrap 安装到 Angular 2 元素?

javascript - 如何使包含某些特殊对的元素成为数组中的第一个?