繁体   English   中英

使用JS添加select> option作为列表项

[英]Adding select>option as list items using JS

我有一个按钮,上面写着“添加顶部”,当按下它时,必须出现一个包含某些值标签的新选择标签。 我差不多做了,但是当我按下按钮时,标签出现并立即消失。 怎么了?

HTML:

      <div class="form-group" id='add_one'>
        <br>
        <h5>You can add up to 3 toppings to your pizza!</h5>
        <ol id="list"></ol>
        <button class="btn btn-primary" id="add">Add topping</button>
      </div>

JS:

var toppings = ['Zucchini', 'Fresh Garlic', 'Black Olives', 'Anchovies',
  'Barbecue Chicken', 'Artichoke', 'Spinach', 'Ham', 'Sausage', 'Mushrooms'];

document.addEventListener('DOMContentLoaded', () => {
  document.querySelector('#add').onclick = () => {

    const topping = document.createElement('select', {
      'name': 'Topping',
      'class': 'form-control'
    });
    list.appendChild(topping);
    toppings.forEach(function(item, i, arr) {
      const ch_topping = document.createElement('option');
      ch_topping.innerHTML += item;
      topping.appendChild(ch_topping);
    });
  };
});

 var toppings = ['Zucchini', 'Fresh Garlic', 'Black Olives', 'Anchovies', 'Barbecue Chicken', 'Artichoke', 'Spinach', 'Ham', 'Sausage', 'Mushrooms']; document.addEventListener('DOMContentLoaded', () => { document.querySelector('#add').onclick = () => { const topping = document.createElement('select', { 'name': 'Topping', 'class': 'form-control' }); list.appendChild(topping); toppings.forEach(function(item, i, arr) { const ch_topping = document.createElement('option'); ch_topping.innerHTML += item; topping.appendChild(ch_topping); }); }; }); 
 <div class="form-group" id='add_one'> <br> <h5>You can add up to 3 toppings to your pizza!</h5> <ol id="list"></ol> <button class="btn btn-primary" id="add">Add topping</button> </div> 

正如@brk所说,

删除document.addEventListener('DOMContentLoaded', () => {/* ... */}将解决您的问题, 并且您无需修改​​任何HTML代码。

但是我建议使用document.getElementById因为document.querySelector()更通用,与document.getElementById相比,性能可能更差

此处检查性能差异


我已经对您的代码进行了一些更改,因为它附加了3个以上的下拉菜单,您可以随时对其进行更改

 var toppings = ['Zucchini', 'Fresh Garlic', 'Black Olives', 'Anchovies', 'Barbecue Chicken', 'Artichoke', 'Spinach', 'Ham', 'Sausage', 'Mushrooms' ]; var appended = 0; var maxAppended = 3; document.getElementById('add').onclick = () => { appended+=1; if(appended <= maxAppended){ const topping = document.createElement('select', { 'name': 'Topping', 'class': 'form-control' }); list.appendChild(topping); toppings.forEach(function(item, i, arr) { const ch_topping = document.createElement('option'); ch_topping.innerHTML += item; topping.appendChild(ch_topping); }); } else { /* Your logic goes here*/ } }; 
 <div class="form-group" id='add_one'> <h5>You can add up to 3 toppings to your pizza!</h5> <ol id="list"> </ol> <button class="btn btn-primary" id="add">Add topping</button> </div> 

按钮默认类型为submit将其更改为button type='button'

另外document.addEventListener('DOMContentLoaded',如果在dom准备就绪后加载脚本document.addEventListener('DOMContentLoaded',则可能不需要document.addEventListener('DOMContentLoaded',

 var toppings = ['Zucchini', 'Fresh Garlic', 'Black Olives', 'Anchovies', 'Barbecue Chicken', 'Artichoke', 'Spinach', 'Ham', 'Sausage', 'Mushrooms' ]; document.querySelector('#add').onclick = () => { const topping = document.createElement('select', { 'name': 'Topping', 'class': 'form-control' }); list.appendChild(topping); toppings.forEach(function(item, i, arr) { const ch_topping = document.createElement('option'); ch_topping.innerHTML += item; topping.appendChild(ch_topping); }); }; 
 <div class="form-group" id='add_one'> <br> <h5>You can add up to 3 toppings to your pizza!</h5> <ol id="list"></ol> <button type="button" class="btn btn-primary" id="add">Add topping</button> </div> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM