【发布时间】:2021-06-30 10:25:23
【问题描述】:
我试图隐藏和显示基于焦点和模糊的文本区域的 innerHTML。它运作良好。但一个问题是,当我删除输入的文本时,内部的 innerHTML 已经存在于元素中但它没有显示。以下是问题复制步骤:
- 在文本区域内输入文本
- 选择所有文本并删除它
- 然后将鼠标从文本区域移出
- innerHTML 在浏览器中不可见
- 但是当我使用浏览器检查元素检查时,innerHTML 在元素中是可见的
let textarea = document.querySelectorAll("textarea");
for (i = 0; i < textarea.length; i++) {
let innertext = textarea[i].innerHTML;
textarea[i].addEventListener("focus", (e) => {
e.target.innerHTML = "";
})
textarea[i].addEventListener("blur", (e) => {
e.target.innerHTML = innertext;
})
}
<textarea name="" id="" cols="30" rows="10">Test</textarea>
【问题讨论】:
-
第 4 步对我来说没有发生。但无论如何,代码中有一些奇怪的东西。当页面加载时,您在
innerText变量中捕获innerHTML,然后,每次文本区域模糊时,您都将旧值放回原处。您永远不会使用输入的值。另外,"blur" !== "mouseout" -
虽然这是一个问题,但我觉得还有更多问题。 @blex。根据 MDN,textarea 不支持
value属性。在这里它工作得很好。此外,innerText、innerHTML 和 value 都给出了不同的值。 -
其实我只需要显示texarea的默认文本,即使用户删除了textarea的所有文本
-
原始代码使用
.innerHTML而不是.value,在某个地方它在编辑中丢失了。新代码似乎有效。 -
@TusharShahi 值应该使用,元素的属性与element's interface不同。
标签: javascript textarea innerhtml onblur onfocus