0

I am making a grocery list, and I have created a dynamic table from an array of objects. A table that an user can update.

Now what I want to do is that the aantal(meaning quantity) can be modified by using the steps input option:

input type="number" id="points" name="points" step="3"

So the expected output would be this table where aantal would be a steps input. That will change the total price of course when modified by the user. Which right now its already doing the calculation.

I am not so experienced with generating tables. I think I need to make a new variable with a for loop that would change the cells for aantal. But how would I go about this? I have been messing around a little bit. And I am a bit stuck. I hope my question is clear.

Update: I am using a For in loop, and so far I can generate INPUT fields but not in the right spot. My condition and table generating is not going well yet :)

Update: I realized I can make another header with the steps input, I realize also its a type=number input field. oops Now I will do that and try to get the proper values into the array.

Here is my code:

let myTable = document.querySelector('#table');

//array met objecten erin {} staat voor een object
    let product =  [
    {omschrijving:"Brood", waarde:1, aantal:3, total:0},
    {omschrijving:"Brocolli", waarde:0.99, aantal:2, total:0},
    {omschrijving:"Krentenbollen", waarde:1.20, aantal:4, total:0},
    {omschrijving:"Noten", waarde:2.99, aantal:2, total:0}
    ]
//update totals
    for(let i=0;i<product.length;i++)
{
  product[i].total = product[i].waarde*product[i].aantal;
}

    let headers = ['Name', 'Prijs', 'Aantal', 'Totaal'];

    
        let table = document.createElement('table');
        let headerRow = document.createElement('tr');
     
        headers.forEach(headerText => {
            let header = document.createElement('th');
            let textNode = document.createTextNode(headerText);
            header.appendChild(textNode);
            headerRow.appendChild(header);
        });
     
        table.appendChild(headerRow);
     
        product.forEach(emp => {
            let row = document.createElement('tr');
     
            Object.values(emp).forEach(text => {
                let cell = document.createElement('td');
                let textNode = document.createTextNode(text);
                cell.appendChild(textNode);
                row.appendChild(cell);
            })
     
            table.appendChild(row);
        });
     
        myTable.appendChild(table);

        function updateTable() {

            test = [];
           
            b1 = document.getElementById('naam').value;
            b2 = document.getElementById('prijs').value;
            b3 = document.getElementById('qty').value;
          
    
        test.push({omschrijving:b1, waarde:b2, aantal:b3, total:0});

        for(let i=0;i<test.length;i++)
        {
          test[i].total = test[i].waarde*test[i].aantal;
        }

        test.forEach(emp => {
            let row = document.createElement('tr');
     
            Object.values(emp).forEach(text => {
                let cell = document.createElement('td');
                let textNode = document.createTextNode(text);
                cell.appendChild(textNode);
                row.appendChild(cell);
            })
     
            table.appendChild(row);
        });
     
        myTable.appendChild(table);

            console.log(product);
          }
body {
    text-align: center;
}
 
div {
    display: inline-block;
}
 
button {
    display: inline-block;
    padding: 10px 20px;
}
 
#table {
    display: block;
    margin-top: 20px;
}
 
th, td {
    border: 1px solid black;
    padding: 5px;
}
<!DOCTYPE html>
<head>
    <link rel="stylesheet" href="style.css">
    
    <title>Boodschappenlijst</title>
</head>
<body>
    <h1> Boodschappenlijst </h1>
    <div id="container"></div>


    <div>
       
        <div id="table"></div>
    </div>

    <p>Naam</p>
    <input type="text" name="item" id="naam" /><br />
    <p>Aantal</p>
    <input type="text" name="quantity" id="qty" /><br />
    <p>Prijs</p>
    <input type="text" name="price" id="prijs" /><br/><br />
    <input type="button" value="Add Product" onclick="updateTable()" id="add"><br /><br />



    <script src="script.js"></script>
</body>
</html>

2
  • Update: I am using a For in loop, and so far I can generate INPUT fields but not in the right spot. My condition and table generating is not going well yet :) for (const property in emp) { if (property.aantal === property.aantal) { let cellinput = document.createElement('input'); let nummer = document.createTextNode(emp); etc. etc. not there yet.
    – Codelly
    Commented Aug 31, 2020 at 9:03
  • I decided to add an extra column, now trying to figure out to connect them to the right position of values etc. etc. so do I close this question ? there was not a real answer, but my approach was not very logical I guess.
    – Codelly
    Commented Sep 2, 2020 at 13:29

0