HTML:
<li><textarea></textarea></li><br><a id="newPoints"></a>
<input type="button" value="+ Add new point" onclick="newPoint();">
CSS(如果需要):
textarea {
font-family: Georgia, 'Times New Roman', Times, serif;
vertical-align: text-top;
width: 300px;
height: 60px;
resize: vertical;
padding: 10px;
}
和Javascript:
function newPoint() {
var a = document.getElementById("newPoints");
a.innerHTML += '<li><textarea placeholder="To delete this point, select this textbox and press the "Delete" button on your keyboard." onkeydown="if(event.keyCode == 46) { this.parentNode.nextSibling.parentNode.removeChild(this.parentNode.nextSibling); this.parentNode.parentNode.removeChild(this.parentNode); }"></textarea></li><br>';
}
为了更好地可视化,这里是fiddle。
所以基本上,使用上面的代码,我试图让用户点击按钮时,包含一个新的<li>
(后面带有<br>
)将创建<textarea>
。当用户在选择textarea时按下键盘上的删除按钮时,将删除此新<li>
,<textarea>
和以下<br>
。
问题在于,当用户创建新的<li>
并在其文本区域中键入一些文本,然后创建另一个<li>
时,前一个<li>
的文本区域中的文本将会消失。
我该如何解决这个问题?
答案 0 :(得分:3)
使用CreateElement
和appendChild
添加元素。我认为发生的事情是当你附加到innerHTML时,它会覆盖newPoints
中的所有内容。
function newPoint() {
var a = document.getElementById("newPoints");
var l = document.createElement("li");
l.innerHTML = '<textarea placeholder="To delete this point, select this textbox and press the "Delete" button on your keyboard." onkeydown="if(event.keyCode == 46) { this.parentNode.nextSibling.parentNode.removeChild(this.parentNode.nextSibling); this.parentNode.parentNode.removeChild(this.parentNode); }"></textarea>';
var b = document.createElement("br");
a.appendChild(l);
a.appendChild(b);
}
答案 1 :(得分:2)
这可能会有所帮助:
function newPoint() {
var a = document.getElementById("newPoints");
var newcontent = document.createElement('li');
newcontent.innerHTML = "<textarea placeholder='To delete this point, select this textbox and press the "Delete" button on your keyboard.' onkeydown=\"if(event.keyCode == 46) { this.parentNode.parentNode.removeChild(this.parentNode);}\"></textarea>";
a.appendChild(newcontent);
}