Isi HTML ‹select› dengan array Javascript

Saya mencoba mengisi kotak pilihan HTML dari array JavaScript, namun ketika saya menjalankan halaman saya, konsol saya mengeluarkan yang berikut:

Uncaught TypeError: Cannot read property 'appendChild' of null at hello.html:113

Namun karena dibuat oleh JavaScript innerHTML saya tidak dapat memilihnya. Apakah ada cara lain untuk memilih ini?

var police_api_dates = ["&date=2017-03",];
var info = L.control();
info.onAdd = function (mymap) {
    this._div = L.DomUtil.create('div', 'info');
    this.update();
    return this._div;
};

info.update = function (properties) {
    this._div.innerHTML = '<select id="parent"></select><h4>Highlighted Postcode</h4>' +  (properties ?
        '<b> Postcode: ' + properties.Name
        : 'Hover over a state');
};
var parent = document.getElementById("parent");
for ( var pos = 0; pos < police_api_dates.length; pos++)
{
    //create an <option> to add the <select>
    var child = document.createElement("option");

    //assign values to the <option>
    child.textContent = police_api_dates[pos]
    child.value = pos;

    //attach the mew <option> to the <selection>
    parent.appendChild(child);
}


info.addTo(mymap);

person Adam    schedule 21.01.2018    source sumber
comment
var parent = document.getElementById("parent"); hanya dievaluasi sekali ketika JS mengeksekusi baris ini. Nanti di info.update(), Anda mengganti elemen ini dengan elemen baru (walaupun idnya sama, elemennya berbeda).   -  person connexo    schedule 21.01.2018
comment
Apakah mungkin untuk menyarankan perbaikan, seperti yang telah Anda tunjukkan, saya masih tidak dapat melihat di mana kesalahan saya.   -  person Adam    schedule 21.01.2018
comment
Hapus saja baris var parent = document.getElementById("parent"); dan Anda siap melakukannya. Ini mengembalikan perilaku browser default yang membuat elemen id dapat diakses oleh idnya tanpa harus mendeklarasikan variabel dan menggunakan document.getElementById.   -  person connexo    schedule 21.01.2018
comment
Saya telah menghapus var parent = document.getElementById(parent); dan parent.appendChild(anak);   -  person Adam    schedule 21.01.2018
comment
Namun masalah saya sekarang adalah kotak pilihan tampak kosong alih-alih menampilkan apa yang ada di dalam array   -  person Adam    schedule 21.01.2018
comment
parent.appendChild(child); tidak boleh dihapus.   -  person connexo    schedule 21.01.2018
comment
TypeError yang Tidak Tertangkap: parent.appendChild bukan fungsi   -  person Adam    schedule 21.01.2018
comment
Anda perlu memastikan bahwa pada saat parent.appendChild(child); dijalankan, DOM memiliki elemen dengan id=parent.   -  person connexo    schedule 21.01.2018
comment
this._div.innerHTML = '‹select id=parent›‹/select› apakah ini tidak dibuat pada baris ini?   -  person Adam    schedule 21.01.2018
comment
Itu ada di dalam suatu fungsi, dan hanya dieksekusi ketika fungsi tersebut dipanggil.   -  person connexo    schedule 21.01.2018
comment
Kode ini memiliki banyak masalah. Argumen dilewatkan dan tidak digunakan, parent dibuat dalam fungsi yang hanya dipanggil setelah mereferensikannya, tetapi fungsi tersebut juga menghancurkan setiap anak yang ditambahkan ke induk... daftarnya terlalu panjang. Saya (sejujurnya!) akan menyarankan Anda memulai dari awal.   -  person trincot    schedule 21.01.2018
comment
Kemungkinan duplikat menggunakan array javascript untuk isi kotak pilih tarik-turun   -  person Heretic Monkey    schedule 21.01.2018
comment
Saya berasumsi bahwa skrip Anda ada di kepala file html Anda, jadi setiap kali kode definisi parent dan loop for berikutnya diproses, <select> belum ada. Saya menyarankan untuk membungkus bagian kode itu dalam fungsi yang dipanggil segera setelah halaman dimuat sepenuhnya. Anda dapat melakukannya misalnya dengan document.addEventListener.   -  person rolfv1    schedule 21.01.2018
comment
Saya baru mengenal javascript jadi saya tidak sepenuhnya mengerti tetapi jika ada yang bisa membantu saya menyesuaikan kodenya, itu akan sangat dihargai sehingga saya bisa belajar dari kesalahan saya.   -  person Adam    schedule 21.01.2018
comment
Perlu diperhatikan juga HTML saya kosong, dan tidak memiliki ID apa pun karena saya ingin melakukannya melalui javascript   -  person Adam    schedule 21.01.2018
comment
@Adam menambahkan tag selebaran. Anda akan mendapatkan jawaban yang lebih sesuai dengan masalah Anda   -  person zer00ne    schedule 21.01.2018


Jawaban (1)


Gunakan metode ini...

var police_api_dates = ["&date=2017-03",];

var info = L.control();


info.onAdd = function (mymap) {
    this._div = L.DomUtil.create('div', 'info');
    this.update();
    return this._div;
};


var S='';


for(var i=0; i<police_api_dates.length; i++){

  S=S+'<option value="'+i+'">'+police_api_dates[i]+'</option>';

}



info.update = function (properties) {

 info.innerHTML='<select id="parent">'+S+'</select>'+'<h4>Highlighted Postcode</h4>' + (properties ? '<b> Postcode: ' + properties.Name : 'Hover over a state');
};


parent.innerHTML=S; // Insert the options

parent.selectedIndex=3; // Set your default value


info.addTo(mymap);

NB: Saya akan menghindari penggunaan nama variabel/ID seperti "anak" dan "orang tua" karena Anda menyiapkan diri untuk konflik kata khusus javascript.

Kode yang diperbarui untuk mengatur urutan Anda... mari kita lihat bagaimana kelanjutannya.

person user4723924    schedule 21.01.2018
comment
Mengalami masalah dalam mengimplementasikan ini ke dalam kode saya, saya telah mengganti kode saya tetapi kolom masih terlihat kosong. - person Adam; 21.01.2018
comment
Bisakah Anda menggunakan P sebagai ganti induk dan mungkin C sebagai ganti anak untuk variabel/ID? - person user4723924; 21.01.2018
comment
Saya sudah melakukannya, namun saya agak tersesat masih tidak berhasil. - person Adam; 21.01.2018
comment
Coba ini... sulit untuk membantumu dari jarak jauh. :) - person user4723924; 21.01.2018
comment
jsfiddle.net/uteey91y/4 Ini diperbarui menggunakan kode Anda, karena Anda tidak melihat info penyelaman kotak muncul di atas. - person Adam; 21.01.2018
comment
Mengubahnya lagi... coba ikuti logikanya sehingga Anda dapat memperbaikinya karena saya tidak memiliki gambaran keseluruhan dari sini. - person user4723924; 21.01.2018
comment
Saya ingin kotak pilihan di atas kotak keadaan, namun seluruh div info telah hilang sekarang. dibandingkan dengan tampilannya di sini jsfiddle.net/e1syoc68 - person Adam; 21.01.2018
comment
Apa yang salah dengan nama parent dan child? Mereka tidak dilindungi undang-undang, dan tentunya lebih mudah dibaca daripada P dan C. S juga tidak terlalu ramah. - person AuxTaco; 21.01.2018
comment
Jangan pernah menggabungkan data sembarangan ke dalam konteks HTML tanpa menghindarinya dengan benar. Lebih baik mengatur sesuatu berdasarkan properti. - person Brad; 22.01.2018