使动态创建的表单可见

时间:2018-11-21 15:57:56

标签: javascript html

我有一个表,其中填充了Firebase中的数据。每个tr都显示该数据。我已经动态创建了一个添加到每个tr的表单,问题是它没有显示,我也不知道为什么。我使用开发工具检查了每个tr,结果表明带有输入的表单确实存在,但是由于某种原因它不可见,为什么?这是我的html:

 const animalList = document.querySelector('#animal-list');
    const form = document.querySelector('#add-animals');
    
    
    function renderAnimals(doc) {
    let tr = document.createElement('tr');
    let deleteButton = document.createElement('button');
    let name = document.createElement('div');
    let species = document.createElement('div');
    let age = document.createElement('div');
    let last_fed = document.createElement('div');
    let last_shed = document.createElement('div');
    let diet = document.createElement('div');
    let basking_area_temp = document.createElement('div');
    let cold_part_temp = document.createElement('div');
    let humidity = document.createElement('div');
    let additional_info = document.createElement('div');
    
     // The form that does not become visible

    let form = document.createElement("form");
    
    form.setAttribute("method", "post");
    form.setAttribute("action", "default.aspx");
    form.setAttribute("target", "_blank");
    let inputField = document.createElement("input");
    
    inputField.setAttribute("name", "firtname");
    
    inputField.setAttribute("value","product1,product2" );
    
    inputField.setAttribute("type", "text");
    form.setAttribute("class", "f")
    
    form.appendChild(inputField);
    
    tr.setAttribute('data-id', doc.id);
    name.textContent = `name: ${doc.data().name}`
    deleteButton.textContent = 'Delete';
    deleteButton.setAttribute('class','btn btn-danger');
    species.textContent = `species: ${doc.data().species}`
    age.textContent = `age: ${doc.data().age}`
    last_fed.textContent = `last fed: ${doc.data().last_fed}`;
    last_shed.textContent = `last shed: ${doc.data().last_shed}`;
    diet.textContent = `diet: ${doc.data().diet}`;
    basking_area_temp.textContent =`basking area temp: ${ doc.data().basking_area_temp}`;
    cold_part_temp.textContent =  `cold part temp: ${doc.data().cold_part_temp}`;
    humidity.textContent = `humidity: ${doc.data().humidity}`;
    additional_info.textContent = `additional info: ${doc.data().additional_info}`;
    
    tr.appendChild(species);
    tr.append(name);
    tr.append(age);
    tr.append(last_fed);
    tr.append(last_shed);
    tr.append(diet);
    tr.append(basking_area_temp);
    tr.append(cold_part_temp);
    tr.append(humidity);
    tr.append(additional_info);
    tr.append(deleteButton);
    tr.append(form);
    
    animalList.appendChild(tr);
    
    
    //deleting data
    deleteButton.addEventListener('click', (event) => {
        event.stopPropagation();
        let id = event.target.parentElement.getAttribute('data-id');
        db.collection('animals').doc(id).delete();
    })
    
    }
    
    // getting data from the back end
    db.collection('animals').onSnapshot(snapshot => {
        let changes = snapshot.docChanges();
        changes.forEach(change => {
            if(change.type == 'added') {
                renderAnimals(change.doc);
            } else if (change.type == 'removed') {
                let li = animalList.querySelector('[data-id=' + change.doc.id + ']');
                animalList.removeChild(li);
            }
        })
    })
    
    // adding data
    form.addEventListener('submit', (event) => {
        event.preventDefault();
        db.collection('animals').add({
            species: form.species.value,
            name: form.name.value,
            age: form.age.value,
            last_fed: document.querySelector('#last-fed').value,
            last_shed: document.querySelector('#last-shed').value,
            diet: form.diet.value,
            basking_area_temp: document.querySelector('#basking-area-temperature').value,
            cold_part_temp: document.querySelector('#cold-temperature').value,
            humidity: form.humidity.value,
            additional_info: document.querySelector('#additional-info').value
    
        })
    })
<!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Repti Care</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="https://www.gstatic.com/firebasejs/5.5.7/firebase.js"></script>
        <script src="https://www.gstatic.com/firebasejs/5.5.5/firebase-app.js"></script>
        <script src="https://www.gstatic.com/firebasejs/5.5.5/firebase-firestore.js"></script>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css"
        integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
        <link rel="stylesheet" href="./css/main.css">
        
    </head>
    <body>
        <div class="jumbotron">
        <div class="placeholder"></div>
        </div>
        <div class="container">
                <h2>Add a new Animal</h2>
        <form class="form-group" id="add-animals">
        Species: <input type="text" id="species" class="form-control">
        Name: <input type="text" id="name" class="form-control" >
        Age: <input type="text" id="age" class="form-control">
        Last Fed: <input type="date" id="last-fed" class="form-control">
        Last Shed: <input type="date" id="last-shed" class="form-control">
        Diet: <input type="text" id="diet" class="form-control">
        Basking area temperature: <input type="text" id="basking-area-temperature" class="form-control">
        Cold part temperature: <input type="text" id="cold-temperature" class="form-control">
        Humidity: <input type="text" id="humidity" class="form-control">
        Addition Info: <textarea class="form-control" id="additional-info"></textarea>
        <button id="btnCreate" class="btn btn-primary">Create</button>
        </form>
        <h3>View Current Animals</h3>
        <table id="animal-list">
         <th>Animals</th>
        </table>
        </div>
        </div>
        <script>
      // Initialize Firebase
      var config = {
        apiKey: "AIzaSyBSuC8nqJzLe7d5jKS-_nE15kaI9Y6NIfI",
        authDomain: "repti-care-32176.firebaseapp.com",
        databaseURL: "https://repti-care-32176.firebaseio.com",
        projectId: "repti-care-32176",
        storageBucket: "repti-care-32176.appspot.com",
        messagingSenderId: "632910932105"
      };
      firebase.initializeApp(config);
      const db = firebase.firestore();
      db.settings({ timestampsInSnapshots: true }); 
    </script>
    <script
    src="https://code.jquery.com/jquery-3.3.1.js"
    integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
    crossorigin="anonymous"></script>
    
        <script src="./scripts/main.js"></script>
    </body>
    </html>

1 个答案:

答案 0 :(得分:0)

这里的问题是您要向tr元素添加元素(名称,年龄等)。您需要在td内添加tr元素,然后附加到td

解决方案:

let tr = document.createElement("tr");之后添加let td = document.createElement("td");

trtd的所有12行中将tr.appendChild(species);更改为tr.append(form);

td.append(form);之后添加tr.appendChild(td);

https://codepen.io/rockysims/pen/VVQmYB