提问人:ja_him 提问时间:10/17/2018 更新时间:10/17/2018 访问量:372
i++ 从 JavaScript for 循环传递到 jQuery(document).ready(function() { 在遍历数组时不用作动态索引
i++ passed from JavaScript for loop to jQuery(document).ready(function() { not working as dynamic index when iterating over the array
问:
对于我的罪过,我不是全职的 JavaScript 从业者,但我正在尝试。这是我尝试的广告管理命名空间的简化版本,它使用 Google 发布商代码 API
slots
是 返回的 GPT 槽数组,设置在 head 中,它试图通过将其推迟到 jQuery 来定位仅存在于 CMS HTML 渲染后的 div。googletag.defineSlot(
我该怎么做:
var i;
for (i=0;i<slots.length;i++) {
jQuery(document).ready(function() {
jQuery('#ads').append('<div id="'+slots[i].getSlotElementId()+'"></div>');
});
}
...带有动态,因为当我调试它时,我看到我不能像这样传递,只能传递硬编码的索引。i
i
这在以下范围内有效:jQuery(document).ready(function() {
console.log('adManager.all_devices.button.slots[3].getSlotElementId());
这会导致未定义的错误:
console.log('adManager.all_devices.button.slots[i].getSlotElementId());
我一直在阅读(诚实),但我很困惑。委婉地说,这是怎么回事,我该如何解决?
答:
3赞
MysterX
10/17/2018
#1
你的结构是错误的。您需要附加一次侦听器,然后在回调中执行循环。如下:ready
jQuery(document).ready(function() {
for (var i=0;i<slots.length;i++) {
jQuery('#ads').append('<div id="'+slots[i].getSlotElementId()+'"></div>');
}
});
评论
0赞
ja_him
10/17/2018
为什么有必要这样做?有没有一个术语可以描述为什么我以我的方式制造问题?
0赞
MysterX
10/17/2018
因为侦听器是异步的,但循环是同步的。我没有时间解释这么广泛的主题ready
for
1赞
Andy
10/17/2018
另一个更简单的原因是,您只需要检查文档是否已准备就绪一次。它的回调用于包含要运行的其余代码。
0赞
ja_him
10/17/2018
@Andy这是一个单独的原因?或者这是MysterX上面给出的部分原因吗?我的意思是,正如你所说,在document.ready上循环是没有意义的,我明白了,但另外,使用那里不起作用的原因是jQuery在文档准备就绪时对函数进行排队,并且不会接受异步系统中的同步内容。是吗?i
0赞
ja_him
10/17/2018
好的,我会花一些时间通读这篇文章,然后从那里探索
评论
i
i
var i;
i