首頁  >  問答  >  主體

使用下拉式選單更改表格中顯示的內容

我正在嘗試使用 HTML 建立一個簡單的維修表單,使用下拉清單我希望能夠選擇一個模型,然後在兩個表中顯示所有相容零件,一個用於新零件,一個用於報廢。目前,我在進行演示時正在將資料硬編碼到 JavaScript 中。我遇到的問題是零件表除了標題之外沒有顯示任何內容。我錯過了什麼?

<!DOCTYPE html>
<html>
<head>
    <title>Repair Form</title>
    <style>
        .table {
            border-collapse: collapse;
        }

        .table th, .table td {
            border: 1px solid black;
            padding: 5px;
        }

        .green-button {
            background-color: green;
            color: white;
            padding: 10px 20px;
            font-size: 16px;
            border: none;
            cursor: pointer;
        }

        .red-button {
            background-color: red;
            color: white;
            padding: 10px 20px;
            font-size: 16px;
            border: none;
            cursor: pointer;
        }
    </style>
<script>
    // SKU data
    var skuData = [
        ["SKU1", "Description 1", "Value 1"],
        ["SKU2", "Description 2", "Value 2"],
        ["SKU3", "Description 3", "Value 3"]
    ];

    // Model data
    var modelData = [
        ["Brand 1", "Gen 1", "Model 1"],
        ["Brand 2", "Gen 2", "Model 2"],
        ["Brand 3", "Gen 3", "Model 3"]
    ];

    // New parts data
    var newPartsData = [
        ["Part 1", "10", "5", "Model 1,Model 2"],
        ["Part 2", "20", "3", "Model 1,Model 3"],
        ["Part 3", "30", "2", "Model 2,Model 3"]
    ];

    // Salvaged parts data
    var salvagePartsData = [
        ["Part 4", "15", "4", "Model 1,Model 3"],
        ["Part 5", "25", "6", "Model 2,Model 3"],
        ["Part 6", "35", "2", "Model 1,Model 2"]
    ];

    function populateDropdowns() {
        var skuDropdown = document.getElementById('sku');
        var modelDropdown = document.getElementById('model');

        // Populate SKU dropdown
        skuData.forEach(function (item) {
            var option = document.createElement('option');
            option.value = item[0];
            option.text = item[1] + " - " + item[2];
            skuDropdown.appendChild(option);
        });

        // Populate Model dropdown
        modelData.forEach(function (item) {
            var option = document.createElement('option');
            option.value = item[0];
            option.text = item[0] + " - " + item[1] + " - " + item[2];
            modelDropdown.appendChild(option);
        });

        // Initial population of tables
        populateTables();
    }

    function populateTables() {
        var modelSelection = document.getElementById('model').value;

        // Populate New Parts table
        var newPartsTable = document.getElementById('new-parts-table');
        newPartsTable.innerHTML = "<thead><tr><th>Part</th><th>Quantity</th><th>Select</th></tr></thead><tbody>";

        newPartsData.forEach(function (item) {
            if (item[3].includes(modelSelection)) {
                var row = document.createElement('tr');
                var partCell = document.createElement('td');
                partCell.textContent = item[0];
                row.appendChild(partCell);
                var quantityCell = document.createElement('td');
                quantityCell.textContent = item[2];
                row.appendChild(quantityCell);
                var selectCell = document.createElement('td');
                var checkbox = document.createElement('input');
                checkbox.type = 'checkbox';
                checkbox.name = 'new_parts[]';
                checkbox.value = item[0];
                selectCell.appendChild(checkbox);
                row.appendChild(selectCell);
                newPartsTable.appendChild(row);
            }
        });

        // Populate Salvaged Parts table
        var salvagePartsTable = document.getElementById('salvaged-parts-table');
        salvagePartsTable.innerHTML = "<thead><tr><th>Part</th><th>Quantity</th><th>Select</th></tr></thead><tbody>";

        salvagePartsData.forEach(function (item) {
            if (item[3].includes(modelSelection)) {
                var row = document.createElement('tr');
                var partCell = document.createElement('td');
                partCell.textContent = item[0];
                row.appendChild(partCell);
                var quantityCell = document.createElement('td');
                quantityCell.textContent = item[2];
                row.appendChild(quantityCell);
                var selectCell = document.createElement('td');
                var checkbox = document.createElement('input');
                checkbox.type = 'checkbox';
                checkbox.name = 'salvaged_parts[]';
                checkbox.value = item[0];
                selectCell.appendChild(checkbox);
                row.appendChild(selectCell);
                salvagePartsTable.appendChild(row);
            }
        });
    }

    function checkValue() {
        var skuValue = parseInt(document.getElementById('sku').value);
        var newParts = document.getElementsByName('new_parts[]');
        var salvagedParts = document.getElementsByName('salvaged_parts[]');
        var totalValue = 0;

        for (var i = 0; i < newParts.length; i++) {
            if (newParts[i].checked) {
                var partName = newParts[i].value;
                var partIndex = newPartsData.findIndex(function (item) {
                    return item[0] === partName;
                });
                totalValue += parseInt(newPartsData[partIndex][1]);
            }
        }

        for (var i = 0; i < salvagedParts.length; i++) {
            if (salvagedParts[i].checked) {
                var partName = salvagedParts[i].value;
                var partIndex = salvagePartsData.findIndex(function (item) {
                    return item[0] === partName;
                });
                totalValue += parseInt(salvagePartsData[partIndex][1]);
            }
        }

        var submitButton = document.getElementById('submit-button');
        if (totalValue < skuValue) {
            submitButton.classList.remove('red-button');
            submitButton.classList.add('green-button');
            submitButton.textContent = 'Pass';
        } else {
            submitButton.classList.remove('green-button');
            submitButton.classList.add('red-button');
            submitButton.textContent = 'Nix';
        }
    }
</script>


</head>
<body onload="populateDropdowns()">
    <h1>Repair Form</h1>
    <form>
        <label for="technician">Technician:</label>
        <input type="text" id="technician" name="technician" required><br><br>

        <label for="sku">SKU:</label>
        <select id="sku" name="sku" required></select><br><br>

        <label for="serial">Serial:</label>
        <input type="text" id="serial" name="serial" required><br><br>

        <label for="model">Model:</label>
        <select id="model" name="model" required onchange="populateTables()"></select><br><br>

        <h2>New Parts</h2>
        <table class="table" id="new-parts-table"></table>

        <h2>Salvaged Parts</h2>
        <table class="table" id="salvaged-parts-table"></table>

        <br>

        <input type="submit" value="Submit" id="submit-button" onclick="checkValue()"><br><br>
    </form>
</body>
</html>

最初,我嘗試建立 CSV 檔案來控制數據,但沒有成功。我還需要它在本地工作,而不是在 Web 伺服器上。

P粉252423906P粉252423906402 天前523

全部回覆(1)我來回復

  • P粉476883986

    P粉4768839862023-09-14 00:40:46

    您將brand-1 作為模型下拉清單中的值傳遞給item[0],將其變更為item[2]它代表模型。我建議您在頂部新增一個空白選項,例如“選擇模型”,以便在頁面載入時預設不選擇任何選項。 不要在段落之外使用
    。請停止使用 var,使用 constlet。如果資料將被更改,則使用 let,對於固定數據,請使用 const。

    // SKU data
    let skuData = [
      ["SKU1", "Description 1", "Value 1"],
      ["SKU2", "Description 2", "Value 2"],
      ["SKU3", "Description 3", "Value 3"]
    ];
    
    // Model data
    let modelData = [
      ["Brand 1", "Gen 1", "Model 1"],
      ["Brand 2", "Gen 2", "Model 2"],
      ["Brand 3", "Gen 3", "Model 3"]
    ];
    
    // New parts data
    let newPartsData = [
      ["Part 1", "10", "5", "Model 1,Model 2"],
      ["Part 2", "20", "3", "Model 1,Model 3"],
      ["Part 3", "30", "2", "Model 2,Model 3"]
    ];
    
    // Salvaged parts data
    let salvagePartsData = [
      ["Part 4", "15", "4", "Model 1,Model 3"],
      ["Part 5", "25", "6", "Model 2,Model 3"],
      ["Part 6", "35", "2", "Model 1,Model 2"]
    ];
    
    function populateDropdowns() {
      var skuDropdown = document.getElementById('sku');
      var modelDropdown = document.getElementById('model');
    
      // Populate SKU dropdown
      skuData.forEach(function(item) {
        var option = document.createElement('option');
        option.value = item[0];
        option.text = item[1] + " - " + item[2];
        skuDropdown.appendChild(option);
      });
    
      // Populate Model dropdown
      modelData.forEach(function(item) {
        var option = document.createElement('option');
        option.value = item[2];
        option.text = item[0] + " - " + item[1] + " - " + item[2];
        modelDropdown.appendChild(option);
      });
    
      // Initial population of tables
      populateTables();
    }
    
    function populateTables() {
      var modelSelection = document.getElementById('model').value;
    
      // Populate New Parts table
      var newPartsTable = document.getElementById('new-parts-table');
      newPartsTable.innerHTML = "<thead><tr><th>Part</th><th>Quantity</th><th>Select</th></tr></thead><tbody>";
    
      newPartsData.forEach(function(item) {
        if (item[3].includes(modelSelection)) {
          var row = document.createElement('tr');
          var partCell = document.createElement('td');
          partCell.textContent = item[0];
          row.appendChild(partCell);
          var quantityCell = document.createElement('td');
          quantityCell.textContent = item[2];
          row.appendChild(quantityCell);
          var selectCell = document.createElement('td');
          var checkbox = document.createElement('input');
          checkbox.type = 'checkbox';
          checkbox.name = 'new_parts[]';
          checkbox.value = item[0];
          selectCell.appendChild(checkbox);
          row.appendChild(selectCell);
          newPartsTable.appendChild(row);
        }
      });
    
      // Populate Salvaged Parts table
      var salvagePartsTable = document.getElementById('salvaged-parts-table');
      salvagePartsTable.innerHTML = "<thead><tr><th>Part</th><th>Quantity</th><th>Select</th></tr></thead><tbody>";
    
      salvagePartsData.forEach(function(item) {
        if (item[3].includes(modelSelection)) {
          var row = document.createElement('tr');
          var partCell = document.createElement('td');
          partCell.textContent = item[0];
          row.appendChild(partCell);
          var quantityCell = document.createElement('td');
          quantityCell.textContent = item[2];
          row.appendChild(quantityCell);
          var selectCell = document.createElement('td');
          var checkbox = document.createElement('input');
          checkbox.type = 'checkbox';
          checkbox.name = 'salvaged_parts[]';
          checkbox.value = item[0];
          selectCell.appendChild(checkbox);
          row.appendChild(selectCell);
          salvagePartsTable.appendChild(row);
        }
      });
    }
    
    function checkValue() {
      var skuValue = parseInt(document.getElementById('sku').value);
      var newParts = document.getElementsByName('new_parts[]');
      var salvagedParts = document.getElementsByName('salvaged_parts[]');
      var totalValue = 0;
    
      for (var i = 0; i < newParts.length; i++) {
        if (newParts[i].checked) {
          var partName = newParts[i].value;
          var partIndex = newPartsData.findIndex(function(item) {
            return item[0] === partName;
          });
          totalValue += parseInt(newPartsData[partIndex][1]);
        }
      }
    
      for (var i = 0; i < salvagedParts.length; i++) {
        if (salvagedParts[i].checked) {
          var partName = salvagedParts[i].value;
          var partIndex = salvagePartsData.findIndex(function(item) {
            return item[0] === partName;
          });
          totalValue += parseInt(salvagePartsData[partIndex][1]);
        }
      }
    
      var submitButton = document.getElementById('submit-button');
      if (totalValue < skuValue) {
        submitButton.classList.remove('red-button');
        submitButton.classList.add('green-button');
        submitButton.textContent = 'Pass';
      } else {
        submitButton.classList.remove('green-button');
        submitButton.classList.add('red-button');
        submitButton.textContent = 'Nix';
      }
    }
    form {
      display: flex;
      flex-direction: column;
      gap: 10px;
      width: 250px;
    }
    
    .table {
      border-collapse: collapse;
    }
    
    .table th,
    .table td {
      border: 1px solid black;
      padding: 5px;
    }
    
    .green-button {
      background-color: green;
      color: white;
      padding: 10px 20px;
      font-size: 16px;
      border: none;
      cursor: pointer;
    }
    
    .red-button {
      background-color: red;
      color: white;
      padding: 10px 20px;
      font-size: 16px;
      border: none;
      cursor: pointer;
    }
    <body onload="populateDropdowns()">
      <h1>Repair Form</h1>
      <form>
        <label for="technician">Technician:</label>
        <input type="text" id="technician" name="technician" required>
    
        <label for="sku">SKU:</label>
        <select id="sku" name="sku" required></select>
    
        <label for="serial">Serial:</label>
        <input type="text" id="serial" name="serial" required>
    
        <label for="model">Model:</label>
        <select id="model" name="model" required onchange="populateTables()">
          <option>Select Model</option>
        </select>
    
        <h2>New Parts</h2>
        <table class="table" id="new-parts-table"></table>
    
        <h2>Salvaged Parts</h2>
        <table class="table" id="salvaged-parts-table"></table>
    
        <input type="submit" value="Submit" id="submit-button" onclick="checkValue()">
      </form>
    </body>

    回覆
    0
  • 取消回覆