我有一个定义如下的函数 -
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的一些非常基本的东西,但我无法清楚地表达这一点,谷歌有所帮助,我试过了。 谢谢!
答案 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()函数的文档。
回调接收两个参数index
和value
,因此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;
});
}
});
}