0

我有一个定义如下的函数 -

function populate() {
        $('input[id^=User]:visible').each(function () {
            currentVal = this.val;
            if (this.id == 'User.FirstName') {
                $('input[id*=FirstName]:visible').each(function (currentVal) {
                    if (this.id.indexOf("User") < 0)
                        this.value = currentVal;
                });
            }
        });
    }

本质上,我想要做的是对于每个元素,从User我想通过另一个元素集合填充循环并为它们分配父循环中的值。问题正在传递currentval到第二个foreach- 由于某种原因,它以 0,1,2 结束。

很明显,我不了解有关 jquery 的一些非常基本的东西,但我无法清楚地表达这一点,让谷歌有所帮助,我试过了。谢谢!

4

2 回答 2

1

$.each接受 2 个参数,第一个是索引,第二个是元素,并且您正在从外部范围覆盖您的 currentVal,其中一个定义为每个回调内部每个函数回调范围中的参数。

function populate() {
        $('input[id^=User]:visible').each(function () {
            currentVal = this.value; //<-- Not val it should be value
            if (this.id == 'User.FirstName') {
                $('input[id*=FirstName]:visible').each(function () {//<-- and here
                    if (this.id.indexOf("User") < 0)
                        this.value = currentVal; 
                });
            }
        });
    }

简要 expn 与您的代码:

function populate() {
        $('input[id^=User]:visible').each(function () {
            currentVal = this.val;   
//<-- Ok now this currentVal  is available in this scope and for its subsequest each, but wait
            if (this.id == 'User.FirstName') {
                $('input[id*=FirstName]:visible').each(function (currentVal) {
//<-- Now you defined the index argument of second  each loop as the same variable name so this variable inside this callback takes a new scope and not the one from its parent each.
                    if (this.id.indexOf("User") < 0)
                        this.value = currentVal;
                });
            }
        });
    }
于 2013-06-28T21:17:15.450 回答
1

您需要阅读有关 jquery each()函数的文档。

回调接收两个参数,index因此value得到currentVal0,1,2,因为您有一个包含 3 个条目(索引 0、1 和 2)的数组

function populate() {
    $('input[id^=User]:visible').each(function () {
        currentVal = this.val;
        if (this.id == 'User.FirstName') {
            $('input[id*=FirstName]:visible').each(function (idx, val) {
                if (this.id.indexOf("User") < 0)
                    this.value = currentVal;
            });
        }
    });
}
于 2013-06-28T21:18:15.523 回答