动态添加输入字段后保留输入值
Preserve input values after dynamically adding an input field
我正在制作一个可以添加额外输入字段的表单。代码如下:
.HTML:
<div class="wrapper-comp-setting" id="flashcard-list">
<div class="fc-item">
<label class="label setting-label" for="flashcards">Flashcard (1)</label>
<input class="input setting-input" name="front" id="front" placeholder="Front" type="text" />
<input class="input setting-input" name="back" id="back" placeholder="Back" type="text" />
</div>
</div>
<input type="button" id="more_fields" onclick="add_fields();" value="Add flashcard" />
.JS:
var fc_number = 1;
function add_fields() {
fc_number++;
document.getElementById('flashcard-list').innerHTML += '<div class="fc-item"><label class="label setting-label" for="flashcards">Flashcard (' + fc_number + ')</label> <input class="input setting-input" name="front" id="front" placeholder="Front" type="text" />'n<input class="input setting-input" name="back" id="back" placeholder="Back" type="text" /></div>'r'n';
}
http://jsfiddle.net/hmxdmaL8/
我的问题是每次我添加一个新字段时,以前字段中的值都会消失。如何保留这些值?
感谢您的阅读。干杯!
小提琴
您不能在同一页面上有多个 ID #front
和#back
。
您的问题是您正在重置和元素的内部HTML - 丢失输入状态和值
而是使用 https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML
使用 beforeend
属性,这样您只需将新创建的元素附加到 DOM
<div class="wrapper-comp-setting" id="flashcard-list">
<div class="fc-item">
<label class="label setting-label" for="flashcards">Flashcard (1)</label>
<input class="input setting-input" name="front" placeholder="Front" type="text" />
<input class="input setting-input" name="back" placeholder="Back" type="text" />
</div>
<!-- use insertAdjacentHTML on #flashcard-list -->
</div>
<input type="button" id="more_fields" value="Add flashcard" />
<script>
var addFieldButton = document.getElementById("more_fields");
var flashCardList = document.getElementById('flashcard-list')
var fc_number = 1;
function add_fields() {
fc_number++;
var fields = '<div class="fc-item">'n'
<label class="label setting-label" for="flashcards">Flashcard (' + fc_number + ')</label>'n'
<input class="input setting-input" name="front" placeholder="Front" type="text" />'n'
<input class="input setting-input" name="back" placeholder="Back" type="text" />'n'
</div>';
flashCardList.insertAdjacentHTML("beforeend", fields );
}
addFieldButton.addEventListener("click", add_fields);
</script>
您的另一个问题是"为什么您不能在调用onclick
事件的按钮之后(就像之前一样</body>
)使用函数设置<script>
":
这是在解析时onclick="add_fields();"
找不到要绑定到的函数的原因。像我一样使用,保持模板的内联JS干净,并将事件委托与addEventListener
一起使用
你可以
试试,
.HTML:
<div class="wrapper-comp-setting" id="flashcard-list">
<div class="fc-item" data-index='1'>
<label class="label setting-label" for="flashcards">Flashcard (1)</label>
<input class="input setting-input" name="front" placeholder="Front" type="text" />
<input class="input setting-input" name="back" placeholder="Back" type="text" />
</div>
</div>
<input type="button" id="more_fields" value="Add flashcard" />
Javascript:
$('#more_fields').click(function() {
var x = $('#flashcard-list');
var last_row_index = $('#flashcard-list div').last().data('index');
var new_no = last_row_index + 1;
var newrow = $('#flashcard-list div').last().clone(true);
newrow.data('index', new_no);
newrow.find('.label').text('Flashcard ' + '(' + new_no + ')');
newrow.find('input').val('');
x.append(newrow);
});
http://codepen.io/anon/pen/yNXxQP
你可以试试jQuery insertAfter()方法
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("<span>data inserted here</span>").insertAfter("p");
});
});
</script>
</head>
<body>
<button>Insert value</button>
<p>one.</p>
<p>two.</p>
</body>
</html>
var fc_number = 1;
function add_fields() {
fc_number++;
debugger;
$("#flashcard-list").append('<div class="fc-item"><label class="label setting-label" for="flashcards">Flashcard (' + fc_number + ')</label> <input class="input setting-input" name="front" id="front" placeholder="Front" type="text" />'n<input class="input setting-input" name="back" id="back" placeholder="Back" type="text" /></div>'r'n')
}
$("#more_fields").on("click",function(){
add_fields();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<!-- had to put the script here because I was getting a "add_fields() not defined" error. Anybody knows why? -->
<div class="wrapper-comp-setting" id="flashcard-list">
<div class="fc-item">
<label class="label setting-label" for="flashcards">Flashcard (1)</label>
<input class="input setting-input" name="front" id="front" placeholder="Front" type="text" />
<input class="input setting-input" name="back" id="back" placeholder="Back" type="text" />
</div>
</div>
<input type="button" id="more_fields" onclick="add_fields();" value="Add flashcard" />
并为此使用 jquery 代码,这并不棘手,因为比如Javascript。它在这里工作得很好,很抱歉在 jQuery 中做出贡献。
相关文章:
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 单击其他元素或鼠标向上时隐藏输入框,但保留一次焦点
- 获取所有输入字段并保留文本字段中的值,即使在使用 javascript 和 php 提交按钮后也是如此
- 我在添加更多输入字段时遇到问题,文本字段中的值不会保留
- 使用onclick()时,在输入中保留必需的标记
- 添加一些值,以便在用户更改该服务器时将其作为占位符输入并保留它
- 使用 Java 脚本或 PHP 提交后保留输入框的最后一个值
- 如何将按钮/输入保留在图像下方
- 如何保留输入复选框值的存储数组
- jQuery clone() 将用户数据保留在输入字段中
- 如何在 AJAX 请求 (Rails) 之间保留表单输入数据
- 键入时保留占位符的文本输入
- 为什么新创建的输入标签不会保留在页面上
- 如何在验证失败弹簧 MVC 时保留输入表单值
- 当我克隆文件输入时,克隆的输入不会保留上传的文件.原始输入确实如此
- 清除 html 输入保留后退(ctrl+z)
- 如何在页面刷新后保留输入单选按钮的状态
- 更改属性文本并使用挖空保留输入的值
- 表单文本字段默认在焦点处消失,用户输入保留在表单更正处
- 将用户输入保留在浏览器中,而不绑定到Bean