添加新输入框值时,输入框值消失
Input box value vanishes when adding a new one
我正在一个web应用程序上工作,我需要一个接一个地添加一些输入框,以便从用户获得命令。我使用JavaScript将它们添加到一个div中,每个div都有一个惟一的ID。我遇到的问题是,一旦我按下enter键,调用JavaScript函数添加下一个,之前的输入框清空,我不知道为什么。
下面是示例代码:
var i = 0;
add_input();
function add_input() {
i++;
document.getElementById('main').innerHTML += "<p>> <input type='text' style='width:90%' id='input" + i + "' onkeypress='press_key(event, this)'></p>";
document.getElementById('input' + i).focus();
}
function press_key(e, t) {
if (e.keyCode == 13) {
add_input();
}
}
<div id='main'></div>
innerHTML将覆盖所有现有内容并用新内容替换它们。您应该创建一个新的输入元素,并使用insertNode
代替。
加法赋值操作符将右边的值与左边的值相加,然后将结果赋值给左边。
一个简单的例子:
x += y;
// is equivalent to
x = x + y;
在你的代码中,你基本上是采用现有的HTML,添加一个新的HTML块,然后将新的HTML分配给取代现有HTML的原始元素。由于该值不是在HTML中设置的,而是存储在DOM中,因此当您为该元素分配新的HTML时(即浏览器将其呈现给取代先前DOM的DOM时),该值就会丢失。
您可以像上面提到的那样使用insertNode
,或者设置HTML属性来首先存储值,如下面的示例所示。但是请注意,这个解决方案纯粹是为了显示值消失的原因。这样做有一个问题,即如果之前的任何输入值被更改,只有这些输入的原始值将被保留。
var i = 0;
add_input();
function add_input() {
var curInput = document.getElementById('input' + i);
if (curInput) {
curInput.setAttribute('value', curInput.value);
}
++i;
document.getElementById('main').innerHTML += "<p>> <input type='text' style='width:90%' id='input" + i + "' onkeypress='press_key(event, this)'></p>";
document.getElementById('input' + i).focus();
}
function press_key(e, t) {
if (e.keyCode == 13) {
add_input();
}
}
<div id='main'></div>
innerHTML
覆盖选定元素的所有html,包括在给定html上执行的任何用户/javascript操作。因此,您的输入值将被新的html删除。您将需要创建一个元素,然后使用appendChild
。这将保持当前html元素的状态。
var i = 0;
function add_input()
{
i++;
var input = document.createElement('input');
input.onkeypress=press_key;
input.id = 'input' + i;
document.body.appendChild(input);
input.focus();
}
function press_key(e)
{
//`t` argument is no longer used. Use `this` instead.
if (e.keyCode == 13)
{
add_input();
}
}
<html>
<head>
<script>
</script>
</head>
<body onload='add_input()'>
<div id='main'>
</div>
</body>
</html>
如上所述,由于"innerHTML"的内部工作,您的其他值消失了。实际上,当你做字符串的时候。innerHTML +=字符串,它将取代它的HTML(意思是什么是以前是完全消失了,实际上是替换为新的HTML)。
你想使用的可能是appendChild()。
我已经设法使你的代码工作:
http://jsfiddle.net/gs1s0fsx/ var i = 0;
function add_input() {
i++;
var main = document.getElementById('main'),
p = document.createElement("p"),
arrow = document.createTextNode('>'),
el = document.createElement('input');
el.type = "text";
el.style = "width:90%";
el.id = "input" + i;
el.addEventListener("keypress", press_key);
main.appendChild(p);
main.appendChild(arrow);
main.appendChild(el);
el.focus();
}
function press_key(e, t) {
if (e.keyCode == 13) {
add_input();
}
}
<a href="javascript: add_input()">add</a>
<div id='main'></div>
- 当我在HTML中选择特定选项时,要消失的输入字段
- 在输入框中单击时 - 在附近显示文本 - 在单击时输出文本消失
- 更改焦点后,输入字段中的文本将消失
- 如何使按钮(输入类型=“提交”)在单击时消失
- 文本在单击时消失,但输入的新文本会消失
- 输入栏在几个塞昆德后消失
- 输入框和文本在IE8中退格/删除时消失
- 输入字段html5占位符没有'不要在javascript中添加值后就消失
- 动态添加的输入字段立即消失
- 输入文本框不断消失
- 无线电输入在页面重新加载时消失(枚举,foreach,默认选中,记住页面重新加载的答案)
- 为什么显示在其他地方的引导程序输入会立即消失
- 输入字段逐渐消失,取代了网站的其他部分
- jQuery Validator无效输入字段在成功提交后消失
- HTML<输入>按钮在单击时消失
- Ipad上的虚拟键盘使输入[类型=范围]滑块拇指消失
- 框阴影在输入元素上消失
- 表单文本字段默认在焦点处消失,用户输入保留在表单更正处
- 从两个输入文本字段,当我在一个输入数据,如果在下一个输入的东西,它必须消失
- 在IE10中,文本区占位符不会在焦点/输入时消失