javascript - 使用 JS 追加新输入会删除之前的输入

标签 javascript html html-input

所以我有这个代码,

spellNumber = 0

function createSpell() {
  document.getElementById("spells").innerHTML +=
    '<p><input type="text"></p><br />'
  spellNumber += 1;
  spellsActive = true
}
<a onClick="createSpell()" class="spellButton" style="background-color:#717171">Add a Spell</a>
<div id="spells"></div>

但是每当我尝试通过单击按钮添加另一个输入时,它都会删除以前的所有输入。我怎样才能阻止这种情况发生?

最佳答案

与现有 .innerHTML 连接意味着仅保留先前元素的 HTML 字符串 - 您的输入没有.value 属性,因此值似乎丢失了。 (实际发生的情况是元素被破坏,然后使用新的完整 HTML 字符串重新创建。)

不要与现有的 innerHTML 连接,而是使用 createElement,以免破坏容器中已存在的内容:

let spellNumber = 0;
const spells = document.getElementById("spells")

function createSpell() {
  const p = spells.appendChild(document.createElement('p'));
  const input  = p.appendChild(document.createElement('input'));
  spells.appendChild(document.createElement('br'));
  spellNumber += 1;
  spellsActive = true
}
<a onClick="createSpell()" class="spellButton" style="background-color:#717171">Add a Spell</a>
<div id="spells"></div>

另一种选择是使用 insertAdjacentHTML,它与 appendChild 一样,不会损坏现有元素:

let spellNumber = 0;
const spells = document.getElementById("spells")

function createSpell() {
  spells.insertAdjacentHTML('beforeend', '<p><input type="text"></input></p></br>');
  spellNumber += 1;
  spellsActive = true
}
<a onClick="createSpell()" class="spellButton" style="background-color:#717171">Add a Spell</a>
<div id="spells"></div>

关于javascript - 使用 JS 追加新输入会删除之前的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53713519/

相关文章:

javascript - 列表中的每个子项都应该有一个唯一的 "key"prop : Unable to determine the issue in my code

javascript - 在 Polymer 3 中切换 Div

html - Bootstrap 导航栏错误 : Allows text below it to show when the navbar is expanded

javascript - 在 Chrome 中,聚焦 HTML 文本输入字段可选择内容。如何取消选择?

javascript - 移动设备的文本框输入键替代

javascript - 使用javascript从web sql中的结果集中删除行

javascript - Node.js 中的异步函数

javascript - 向 wcfrestful 发送一个参数

html - 将 div 高度设置为父级的 100%

html - 如何为输入占位符和值设置不同的字体?