【问题标题】:How to create and fill list item with a button?如何使用按钮创建和填充列表项?
【发布时间】:2019-08-16 12:53:00
【问题描述】:

我正在尝试使用在文本字段中输入的数据创建要显示的项目列表。我的麻烦是,当我想添加第二个列表项时,第一个只会更新。我尝试了一些不同的方法,但我被卡住了。

function addToList() {
  let food = document.getElementById("food").value;
  let amount = document.getElementById("amount").value;
  let unit = document.getElementById("unit").value;

  document.getElementById("foodlist").innerHTML =
    (food + ' ' + amount + ' ' + unit + '.')

};
<input type="text" name="" value="food" id="food"><br>
<input type="text" name="" value="amount" id="amount"><br>

<select id="unit">
  <option value="oz">ounces</option>
  <option value="lb">pounds</option>
  <option value="servings">servings</option>
</select><br>

<button onclick="addToList()" type="button" name="button" id="addButton">add</button><br>

<li id="foodlist"></li>

我希望文本字段中的数据创建一个新的列表项,并在每次按下按钮时将数据添加到对象中。到目前为止,我得到的只是列表项一直在更新。

【问题讨论】:

标签: javascript html button listitem


【解决方案1】:

您需要创建一个ul 元素并动态创建li 元素,然后将它们附加为此ul 的子元素。见以下代码:

function addToList() {
  let food = document.getElementById("food").value;
  let amount = document.getElementById("amount").value;
  let unit = document.getElementById("unit").value;

  let li = document.createElement("li");
  li.textContent = food + ' ' + amount + ' ' + unit + '.';
  document.getElementById("foodlist").appendChild(li);
}
<input type="text" name="" value="food" id="food">
<br>
<input type="text" name="" value="amount" id="amount">
<br>

<select id="unit">
  <option value="oz">ounces</option>
  <option value="lb">pounds</option>
  <option value="servings">servings</option>
</select>

<br>
<button onclick="addToList()" type="button" name="button" id="addButton">add</button>
<br>
<ul id="foodlist"></ul>

【讨论】:

    【解决方案2】:

    原因是当你想追加一个新项目时,你没有创建一个新的列表元素,这就是它不断替换初始值并更新初始元素的原因。

    当您添加新项目时,只需使用以下代码将新列表节点附加到 DOM 即可。

    function addToList() {
      let food = document.getElementById("food").value;
      let amount = document.getElementById("amount").value;
      let unit = document.getElementById("unit").value;
      
      var node = document.createElement("LI");                 
      var textnode = document.createTextNode(food + ' ' + amount + ' ' + unit + '.');       
      node.appendChild(textnode); 
      document.getElementById("foodlist").appendChild(node)
        
    
    };
    <input type="text" name="" value="food" id="food">
    <br>
    <input type="text" name="" value="amount" id="amount">
    <br>
    
    <select id="unit">
      <option value="oz">ounces</option>
      <option value="lb">pounds</option>
      <option value="servings">servings</option>
    </select>
    
    <br>
    <button onclick="addToList()" type="button" name="button" id="addButton">add</button>
    <br>
    <ul id="foodlist"></ul>

    【讨论】:

      【解决方案3】:

      尝试追加内容。

      请将此行 document.getElementById("foodlist").innerHTML = 更改为 document.getElementById("foodlist").innerHTML +=

      并将&lt;li id="foodlist"&gt;&lt;/li&gt; 更改为&lt;ul id="foodlist"&gt;&lt;/ul&gt;

      (food + ' ' + amount + ' ' + unit + '.')('&lt;li&gt;'+food + ' ' + amount + ' ' + unit + '.&lt;/li&gt;')

      function addToList() {
        let food = document.getElementById("food").value;
        let amount = document.getElementById("amount").value;
        let unit = document.getElementById("unit").value;
      
        document.getElementById("foodlist").innerHTML +=
          ('<li>'+food + ' ' + amount + ' ' + unit + '.</li>')
      
      };
      <input type="text" name="" value="food" id="food">
      <br>
      <input type="text" name="" value="amount" id="amount">
      <br>
      
      <select id="unit">
        <option value="oz">ounces</option>
        <option value="lb">pounds</option>
        <option value="servings">servings</option>
      </select>
      
      <br>
      <button onclick="addToList()" type="button" name="button" id="addButton">add</button>
      <br>
      <ul id="foodlist"></ul>

      【讨论】:

        【解决方案4】:

        那是因为您使用 innerHTML 替换所有内容。您可以像这样重用现有的 HTML(使用 += 而不是 +):

        function addToList() {
          let food = document.getElementById("food").value;
          let amount = document.getElementById("amount").value;
          let unit = document.getElementById("unit").value;
        
          document.getElementById("foodlist").innerHTML +=
            ('<li>' + food + ' ' + amount + ' ' + unit + '.' + '</li>')
        
        };
        <input type="text" name="" value="food" id="food">
        <br>
        <input type="text" name="" value="amount" id="amount">
        <br>
        
        <select id="unit">
          <option value="oz">ounces</option>
          <option value="lb">pounds</option>
          <option value="servings">servings</option>
        </select>
        
        <br>
        <button onclick="addToList()" type="button" name="button" id="addButton">add</button>
        <br>
        <ul id="foodlist"></ul>

        【讨论】:

        • 这会将文本添加到同一个列表项。
        • 不再。 :)
        【解决方案5】:

        您不能将 li 元素添加到 li 元素 - 父元素必须是 ULOL 之一

        按钮的每次点击都应该调用一个函数来向父节点添加一个新的 DOM 元素 - 在这种情况下,它将根据需要添加一个新的 li 元素以及来自其他表单元素的内容

        <!DOCTYPE html>
        <html>
            <head>
                <style>
                    form{width:60%;font-family:calibri,verdana,arial}
                    label{display:block;width:90%;clear:both;float:none;margin:1rem auto;padding:1rem 0 }
                    label > input, label > select{float:right;width:80%;padding:1rem;margin:-1rem;}
                    label:before{content:attr(for);text-transform:capitalize}
                    button{padding:1rem;width:100%;}
                </style>
                <script>
                    document.addEventListener('DOMContentLoaded',e=>{
                        let form=document.querySelector('form');
                        let food=document.querySelector('input[type="text"][name="food"]');
                        let amount=document.querySelector('input[type="text"][name="amount"]');
                        let list=document.querySelector('ul[id="foodlist"]');
                        let bttn=document.querySelector('button[name="button"]');
                        let unit=document.querySelector('select[name="unit"]');
        
        
        
        
                        bttn.addEventListener('click', e=>{
                            let li=document.createElement('li');
                                li.innerText = [
                                    food.value,
                                    amount.value,
                                    unit.value
                                ].join(' ');
                            list.appendChild( li );
                            form.reset();
                        })
                    });
                </script>
            </head>
            <body>
                <form method='post'>
                    <label for='food'><input type='text' name='food' placeholder='Food - eg: Venison' /></label>
                    <label for='amount'><input type='text' name='amount' placeholder='Amount - eg: 45' /></label>
                    <label for='unit'>
                        <select name='unit'>
                            <option selected hidden disabled>Please select
                            <optgroup label='Weight'>
                                <option value='oz'>Ounces
                                <option value='lb'>Pounds
                                <option value='gr'>Grams
                            </optgroup>
                            <optgroup label='Volume'>
                                <option value='ml'>Millilitre
                                <option value='l'>Litres
                                <option value='gall'>Gallons
                            </optgroup>
                            <optgroup label='Misc'>
                                <option value='servings'>Servings
                                <option value='items'>Items
                            </optgroup>
                        </select>
                    </label>
                    <button type='button' name='button'>Add</button>
                </form>
        
                <!-- LI elements are added to a UL, OL or DL -->
                <ul id='foodlist'></ul>
            </body>
        </html>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-27
          • 1970-01-01
          • 2020-08-05
          • 1970-01-01
          • 2020-05-11
          • 1970-01-01
          • 1970-01-01
          • 2017-11-14
          相关资源
          最近更新 更多