i++ перешел из JavaScript для цикла в jQuery(документ).ready(function() {не работает как динамический индекс при итерации по массиву

Из-за своих грехов я не практикующий JavaScript на полный рабочий день, но я пытаюсь. Вот упрощенная версия моего пространства имен для управления объявлениями, в котором используется API тегов издателя Google.

slots массив слотов GPT, возвращаемый googletag.defineSlot(, установите в заголовке, который пытается нацелить div, которые существуют только для рендеринга HTML после CMS, отложив его до jQuery.

Как я могу это сделать:

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

Я читал (честно), но я в замешательстве. Проще говоря, что здесь происходит и как я могу это исправить?

1 ответ

Решение

У вас неправильная конструкция. Вам необходимо приложить ready слушатель один раз, а затем внутри обратного вызова сделать свой цикл. Как показано ниже:

  jQuery(document).ready(function() {
    for (var i=0;i<slots.length;i++) {
        jQuery('#ads').append('<div id="'+slots[i].getSlotElementId()+'"></div>');
    }
  });
Другие вопросы по тегам