在JavaScript回调中发送索引值[重复]

问题描述 投票:2回答:1

这个问题在这里已有答案:

我使用SignaturePed js插件在我的网站中实现签名。我有多个签名类型和多个用户。在这个为我运行所有用户和tutch SignaturePed类为每个canvas元素

for (var i = 0; i < $scope.summary.insurance.members.length; i++) {

    if ($scope.summary.insurance.members[i].Age >= 18) {

        if ($scope.summary.insurance.payment.IdentityNo == $scope.summary.insurance.members[i].IdentityNo && $scope.summary.localPolicy.Action == 0) { //payer only

            $scope.summary.signaturePad[i] = {

                1: new SignaturePad($scope.summary.canvas[i][1], {
                    'onEnd': function() {
                        $scope.summary.saveSignOnBlur(1, i)
                    }
                }),

                2: new SignaturePad($scope.summary.canvas[i][2], {
                    'onEnd': function() {
                        $scope.summary.saveSignOnBlur(2, i)
                    }
                }),

                3: new SignaturePad($scope.summary.canvas[i][3], {
                    'onEnd': function() {
                        $scope.summary.saveSignOnBlur(3, i)
                    }
                }),

            }

        } else {

            $scope.summary.signaturePad[i] = {

                1: new SignaturePad($scope.summary.canvas[i][1], {
                    'onEnd': function() {
                        $scope.summary.saveSignOnBlur(1, i)
                    }
                }),

                2: new SignaturePad($scope.summary.canvas[i][2], {
                    'onEnd': function() {
                        $scope.summary.saveSignOnBlur(2, i)
                    }
                }),

            }

        }

    }

}

我的问题是,当回调运行时,索引(i)的值为2(对于2个用户),因为在循环结束时这是索引值

javascript
1个回答
2
投票

你可以在这个问题的评论中看到有两个解决方案第一个简单的解决方案:使用let进行索引减速以将索引变量设置为局部(实际上在每次迭代中都是一个新变量),此解决方案中的缺陷是let支持仅来自es6,因此无法在资源管理器或边缘工作。因为我需要这个脚本将在资源管理器中工作,我已经实现了第二个闭包解决方案,并且在每次迭代时都会关闭一个新的范围:

for(var i = 0;i < ...;i++){ (function(i){...})(i); }

© www.soinside.com 2019 - 2024. All rights reserved.