【发布时间】:2021-11-22 13:14:54
【问题描述】:
我在使用动态(javascript)创建的 div 来定位正确的 div id 时遇到问题。
它应该如何运作..
- 每次按下添加文本按钮时,都会创建一个带有递增 id 的新文本输入
- 当您在此框中键入时,文本会显示在结果 div 中
- 每次按添加文本按钮时都会重复相同的操作。
到目前为止,上述所有功能都符合我的预期。
问题.. 当您添加第二个文本然后尝试编辑第一个文本时,id 错误,因此第一个文本不会更新。
如何按预期实现此功能,以便无论您添加多少文本,您都可以编辑以前的文本并更新正确的 id?
let textcount = 0;
function addtext() {
textcount++
//create textarea with incrimenting id
var newtext = document.createElement("div");
newtext.id = "text" + (textcount);
newtext.innerHTML = "text id = " + (textcount) + "<br><textarea placeholder=\"Start Typing\" id=\"textarea" + textcount + "\" class=\"textarea\" oninput=\"updatetext();\" autocomplete=\"off\" ></textarea>";
document.getElementById("newtextboxappend").appendChild(newtext);
//create results div with matching id
var shownewtext = document.createElement("div");
shownewtext.id = "showtext" + (textcount);
document.getElementById("resultsappend").appendChild(shownewtext);
document.getElementById("showtext" + (textcount)).innerText = document.getElementById("textarea" + (textcount)).value;
}
function updatetext() {
document.getElementById("showtext" + (textcount)).innerText = (textcount) + ") " + document.getElementById("textarea" + (textcount)).value;
//console log id when typing to see what id is being targeted
console.log(textcount);
};
.newtextboxescontain {
width:100%;
border: 1px black solid;
}
.resultscontain {
width: 100%;
border: 0.5px black solid;
}
textarea {
width: 95%;
height: 20px;
}
<button onclick="addtext();">Add Text</button>
<br /><br />
Text Inputs: <br />
<div id="newtextboxescontain" class="newtextboxescontain">
<div id="newtextboxappend"></div>
</div>
<br />
Results: <br />
<div id="resultscontain" class="resultscontain">
<div id="resultsappend"></div>
</div>
【问题讨论】:
-
不要使用编号的 ID。将文本和输入包装在一个 div 中,然后向上,然后向下查找文本。下面是示例代码:jsfiddle.net/ck8uzqp9(这也为
input事件使用了事件委托)
标签: javascript html dynamic