Как привязать данные массива для выбора опции

у меня есть данные массива, которые он называет "provinsi", я получил массив на консоли, как обычный массив

вот мой код

 <select id = "select">
      <option value = "default">default</option>
 </select>
 <script>
        console.info(provinsi)
        var select = document.getElementById("select");

        for(var i = 0; i < provinsi.length; i++)
        {
            var option = document.createElement("option"),
                txt = document.createTextNode(provinsi[i]);
            option.appendChild(txt);
            option.setAttribute("value",provinsi[i]);
            select.insertBefore(option,select.lastChild);
        }
    </script>

но я получил такой результат Как привязать данные массива для выбора опции

вот моя консоль "provinsi" Как привязать данные массива для выбора опции какие-нибудь предложения? спасибо раньше

Каков ожидаемый результат?

brk 24.07.2018 18:04

извините, забыл об этом, мне нужно выбрать данные опции - это мой массив, который он называет "provinsi"

Shaugi Muhammad 24.07.2018 18:07
jsfiddle.net/w83b7j6x/1 - у меня вроде работает. Где вы определяете provinsi?
Kingsley 24.07.2018 18:08

Я использую laravel на blade.php, я определяю из листовки, и я использую код для привязки данных к параметру в лезвии внутри тега <script>

Shaugi Muhammad 24.07.2018 18:10

Код сам по себе работает нормально. Можете ли вы показать, как вы заполняете переменную provinsi

karthick 24.07.2018 18:10

Ваш код работает. Возможно ли, что этот код выполняется до загрузки DOM, а option не определен при его запуске?

SamVK 24.07.2018 18:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
385
3

Ответы 3

Я считаю, что модель DOM еще не готова.

Попробуйте поместить свой код в IIFE.

(function() {
    // the DOM will be available here

    console.info(provinsi)
    var select = document.getElementById("select");

    for(var i = 0; i < provinsi.length; i++)
    {
        var option = document.createElement("option"),
            txt = document.createTextNode(provinsi[i]);
        option.appendChild(txt);
        option.setAttribute("value",provinsi[i]);
        select.insertBefore(option,select.lastChild);
    }

})();

** Чтобы уточнить, как упомянул @karthick, убедитесь, что скрипт загружен в конец тега body.

вам нужно использовать DOMContentLoaded, чтобы сообщить, что dom готов, а не iife

karthick 24.07.2018 18:15

@karthick Я ничего не должен. вы можете сделать это в iife, если скрипт загружен в конце тега body. Обновлено: на самом деле, это выполняется быстрее, чем обработчик загрузки, потому что он ожидает только готовности DOM, а не загрузки всех изображений. И это работает в любом браузере.

yotke 24.07.2018 18:18

Надеюсь, это сработает, счастливое кодирование :) Примечание: измените массив провинций на исходные значения

$(document).ready(()=> {
  let provinces = ["test1", "test2", "test3", "test4" ]
  $.each(provinces, function(key,item) {
  $("#select").append(new Option(item, key));
});
})
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id = "select">
      <option value = "default">default</option>
 </select>

DOM может не завершить загрузку при запуске вашего скрипта. Вы должны запустить свою функцию на DOMContentLoaded.

<select id = "select">
      <option value = "default">default</option>
 </select>
 <script>
  var provinsi = ["test1", "test2"];
        document.addEventListener("DOMContentLoaded", function(event) {
    //DOM fully loaded and parsed
    var select = document.getElementById("select");

        for(var i = 0; i < provinsi.length; i++)
        {
            var option = document.createElement("option"),
                txt = document.createTextNode(provinsi[i]);
            option.appendChild(txt);
            option.setAttribute("value",provinsi[i]);
            select.insertBefore(option,select.lastChild);
        }
  });
        
    </script>
<script>

</script>

Другие вопросы по теме