JS InputFields не запускается с коммутатора

#javascript #html

#javascript #HTML

Вопрос:

Я пытаюсь создать динамические поля ввода в зависимости от выбранных параметров. Пока что он достигает коммутатора, но принимает только первый случай, независимо от того, изменяется ли параметр..

 const crud =  ["Create", "Update"]
const whatCRUD = ["Company", "Person", "Hobby"];
var choice = document.getElementById("selectCRUD");
var what1 = document.getElementById("createSel");
var input2 = document.getElementById("input2")
var btnCU = document.getElementById("btnCU");
const url = "https://dueinator.dk/CA2/api/";


choice.innerHTML = choicesToHTML(crud);
what1.innerHTML = choicesToHTML(whatCRUD);
what1.addEventListener("change", createInputFields);
setInputField2();
btnCU = addEventListener("click",postMethod);

function choicesToHTML(choices) {
    return choices.map(choice => "<option value=""   choice   "">"   choice   "</option>");
}

function setInputField2() {
    input2.innerHTML = createInputFields();
}

function createInputFields() {
    var selectedCRUD = what1.value;
    console.log(selectedCRUD);
    var inputs = "";
    switch (selectedCRUD) {   
        case "Company":
            inputs  = "<input id="cName" type="text" placeholder="Company name..">";
            inputs  = "<input id="cDesc" type="text" placeholder="Company description..">";
            inputs  = "<input id="cCVR" type="number" value="70000601">";
            inputs  = "<input id="cNumOfEmp" type="number" placeholder="Amount of employees..">";
            inputs  = "<input id="cMarketValue" type="number" placeholder="Market value..">";
            inputs  = "<input id="cEmail" type="text" placeholder="Email">";
            inputs  = "<input id="cPhone" type="number" placeholder="Phone number">";
            inputs  = "<input id="cAddress" type="text" placeholder="Address">";
            return inputs;
        case "Person":
            inputs  = "P<input id="pFName" type="text"> <br>";
            inputs  = "<input id="pLName" type="text"> <br>";
            inputs  = "<input id="pHobby" type="text"> <br>";
            inputs  = "<input id="pEmail" type="text"> <br>";
            inputs  = "<input id="pPhone" type="number"> <br>";
            inputs  = "<input id="pAdress" type="text"> <br>";
            return inputs;
        case "Hobby":             
            inputs  = "H<input id="hName" type="text" placeholder="Write the name here..">";
            inputs  = "<input id="hDesc" type="text"> placeholder="Write the desc here.."";
            return inputs;
        default:
            alert("Something went wrong, please try again or reload page (F5)");
            return "<input type="text" disabled="disabled">";
    }
}

function postMethod() {
    var data = createData;
    fetch(url   what1.value, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json; charset=utf-8' },
        body: JSON.stringify(data) // body data type must match "Content-Type" header
    }).then((res) => res.json()).then((data) => {
        console.log('data from post', data);        
        alert("Entity has been updated");
    }).catch(error => console.log(error));
}

function createData() {
    var selectedEntity = what1.value;
    switch(selectedEntity) {
        case "Hobby":
            var hName = document.getElementById("hName");
            var hDesc = document.getElementById("hDesc");
            var hData = {hName, hDesc}
            return hData;
        case "Company":
            var cName = document.getElementById("cName");
            var cDesc = document.getElementById("cDesc");
            var cCVR = document.getElementById("cCVR");
            var cNumOfEmp = document.getElementById("cNumOfEmp");
            var cMarketValue = document.getElementById("cMarketValue");
            var cEmail = document.getElementById("cEmail");
            var cPhone = document.getElementById("cPhone");
            var cAddress = document.getElementById("cAddress");
            var cData = {cName, cDesc, cCVR, cNumOfEmp, cMarketValue, cEmail, cPhone, cAddress};
            return cData;
        case "Person":
            var pFName = document.getElementById("pFName");
            var pLName = document.getElementById("pLName");
            var pHobby = document.getElementById("pHobby");
            var pEmail = document.getElementById("pEmail");
            var pPhone = document.getElementById("pPhone");
            var pAddress = document.getElementById("pAddress");
            var pData = {pFName, pLName, pHobby, pEmail, pPhone, pAddress}
            return pData;
    }
}  
 <!DOCTYPE html>
<html>

  <head>
      <meta name="viewport" content="width=device-width, initial-scale=1" />
      <link href="style.css" rel="stylesheet" />
  </head>

  <body>

    <h6>C(R)UD</h6>
  
    <label>Choose what you wanna do</label>
    <select id="selectCRUD" class="mdb-select md-form"></select>
    <labal>Choose what you want to mod</labal>
    <select id="createSel" class="mdb-select md-form"></select>
    <button id="btnCU" type="button">Create/Update entity</button>
    <span id="input2"></span>

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

</html>  

Для меня довольно важно заставить эту часть работать, поскольку 80% моей функциональности зависит от этого.
Я надеюсь, что кто-нибудь может сказать мне причину, почему это происходит, спасибо 🙂

Ответ №1:

Чтобы получить выбранный в данный момент параметр, вы должны сначала получить индекс через selectedIndex свойство.

Измените следующую строку из createInputFields

 var selectedCRUD = what1.value;
  

Для

 const selectedCRUD = what1.options[what1.selectedIndex].value;