Javascript:追加到元素会使之前的子元素丢失输入数据

标签 javascript html

下面示例中的按钮 onClick 函数将文本区域逐个添加。但是,问题是当我添加例如 2 个文本区域并在其中输入一些文本,然后添加第三个文本区域时 - 我之前输入的文本消失了。它被刷新并显示为空白,未保存。

有解决办法吗?或者也许是其他一些更复杂的方法。

jsfiddle

index.html

<input type="submit" value="ADD" onClick="add();">
<div id="new"></div>

script.js

n=1;
function add() {
document.getElementById('new').innerHTML += '<div>' + n + '. Question: <br/><textarea name="question'+n+'" rows="4" cols="50"></textarea><br/></div>';
n++;
}

最佳答案

使用 DOM API 附加 <div>而不是设置innerHTML .

var n = 1;
function add() {
  var textarea = document.createElement("textarea");
  textarea.name = "question" + n;
  textarea.rows = 4;
  textarea.cols = 50;

  var div = document.createElement("div");    
  div.innerHTML = n + ". Question: <br />" + textarea.outerHTML + "<br />";

  document.getElementById("new").appendChild(div);
  n++;
}

它相当长,但字符串连接少得多 - 因此更容易阅读。如果事情变得更复杂,您可能需要考虑使用模板语言,例如 Mustache 或 Handlebars。

更新了jsfiddle:http://jsfiddle.net/5FJ4a/6/

关于Javascript:追加到元素会使之前的子元素丢失输入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366436/

相关文章:

javascript - 查找空 DOM 元素并使用 Jquery/Javascript 删除它们

javascript - 为什么 closest() 在遍历树之前首先找到它自己的元素

javascript - 如何在 HTML 网站中启用旋转 slider 自动播放

javascript - jQuery 安全性,在浏览器中执行代码

html - 移动 chrome 中的窗口高度 100%

php - 如何按级别属性渲染每行的金字塔?

javascript - 在没有 Ajax 的情况下将 PHP 数组返回到 javascript,可能吗?

javascript - 将切换功能与另一个功能组合

javascript - 具体如何转换透视原点?

javascript - HTML5 网络音频 - 我无法获得工作