Jquery foreach传递变量

时间:2013-06-28 21:13:57

标签: jquery

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

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的一些非常基本的东西,但我无法清楚地表达这一点,谷歌有所帮助,我试过了。 谢谢!

2 个答案:

答案 0 :(得分:1)

$.each接受2个参数,第一个是索引,第二个是元素,并且您将从outerscope中覆盖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; 
                });
            }
        });
    }

简要说明您的代码:

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;
                });
            }
        });
    }

答案 1 :(得分:1)

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

回调接收两个参数indexvalue,因此currentVal得到0,1,2因为你有一个包含3个条目的数组(索引0,1和2)< / p>

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;
            });
        }
    });
}