cmplieger
cmplieger

Reputation: 7361

generate list of variables from a FOR loop

     var select = [];
        for (var i = 0; i < nameslots; i += 1) {
              select[i] = this.value;
        }

This is an extract of my code. I want to generate a list of variables (select1, select2, etc. depending on the length of nameslots in the for.

This doesn't seem to be working. How can I achieve this? If you require the full code I can post it.

EDIT: full code for this specific function.

//name and time slots
function gennametime() {
    document.getElementById('slots').innerHTML = '';
    var namelist = editnamebox.children, slotnameHtml = '', optionlist;
    nameslots = document.getElementById('setpresentslots').value;
    for (var f = 0; f < namelist.length; f += 1) {
        slotnameHtml += '<option>'
                          + namelist[f].children[0].value
                          + '</option>';
    };
    var select = [];
    for (var i = 0; i < nameslots; i += 1) {
        var slotname = document.createElement('select'),
            slottime = document.createElement('select'),
            slotlist = document.createElement('li');
        slotname.id = 'personname' + i;
        slottime.id = 'persontime' + i;
        slottime.className = 'persontime';
        slotname.innerHTML = slotnameHtml;        
        slottime.innerHTML = '<optgroup><option value="1">00:01</option><option value="2">00:02</option><option value="3">00:03</option><option value="4">00:04</option><option value="5">00:05</option><option value="6">00:06</option><option value="7">00:07</option><option value="8">00:08</option><option value="9">00:09</option><option value="10">00:10</option><option value="15">00:15</option><option value="20">00:20</option><option value="25">00:25</option><option value="30">00:30</option><option value="35">00:35</option><option value="40">00:40</option><option value="45">00:45</option><option value="50">00:50</option><option value="55">00:55</option><option value="60">1:00</option><option value="75">1:15</option><option value="90">1:30</option><option value="105">1:45</option><option value="120">2:00</option></optgroup>';
        slotlist.appendChild(slotname);
        slotlist.appendChild(slottime);
        document.getElementById('slots').appendChild(slotlist);
        (function (slottime) {
            slottime.addEventListener("change", function () {

                select[i] = this.value;
            });
        })(slottime);
    }

}

Upvotes: 0

Views: 63

Answers (2)

adeneo
adeneo

Reputation: 318302

You'll have to close in the iterator as well in that IIFE

(function (slottime, j) {
    slottime.addEventListener("change", function () {
         select[j] = this.value;
    });
})(slottime, i);

and it's only updated when the element actually change

Upvotes: 1

Andrew Gray
Andrew Gray

Reputation: 3790

The cool thing about JavaScript arrays is that you can add things to them after the fact.

var select = [];
for(var i = 0; i < nameSlots; i++) {
    var newValue = this.value;

    // Push appends the new value to the end of the array.
    select.push(newValue); 
}

Upvotes: 0

Related Questions