我有一个表单,用户可以在其中添加任意数量的字段。他们也可以删除这些字段。
我希望能够有一个数组来保存表单中值的跟踪 - 最好不使用提交按钮。即只要用户更改值,就会更新此数组在形式。
但是,我不知道该怎么做 - 所以我尝试使用提交按钮制作一个。但是,它只读取最终表单条目而不是所有条目。
这是我在这里的尝试:
document.querySelector('form.data').addEventListener('submit', function (e) {
//prevent the normal submission of the form
e.preventDefault();
var values = {};
$.each($('form.data').serializeArray(), function(i, field) {
values[field.name] = field.value;
});
console.info(values);
});
的jsfiddle: https://jsfiddle.net/tomi2/4cqtpefm/4/
完整代码:
HTML:
<form role="form" action="/wohoo" method="POST" class="data">
<label>Variable 1, Variable 2</label>
<div class="multi-field-wrapper">
<div class="multi-fields">
<div class="multi-field">
<input type="text" name="Var1[]">
<input type="text" name="Var2[]">
<button type="button" class="remove-field">Remove</button>
</div>
</div>
<button type="button" class="add-field">Add field</button>
<button type="submit"> Submit </button>
</div>
</form>
Javascript:
$('.multi-field-wrapper').each(function() {
var $wrapper = $('.multi-fields', this);
$(".add-field", $(this)).click(function(e) {
$('.multi-field:first-child', $wrapper).clone(true).appendTo($wrapper).find('input').val('').focus();
});
$('.multi-field .remove-field', $wrapper).click(function() {
if ($('.multi-field', $wrapper).length > 1)
$(this).parent('.multi-field').remove();
});
});
document.querySelector('form.data').addEventListener('submit', function (e) {
//prevent the normal submission of the form
e.preventDefault();
var values = {};
$.each($('form.data').serializeArray(), function(i, field) {
values[field.name] = field.value;
});
console.info(values);
});
答案 0 :(得分:1)
在这里,试试这个..这将在提交时给你完整的结果..
var $wrapper = $('.multi-fields');
$(".add-field").on( 'click', function(e) {
$('.multi-field:first-child', $wrapper).clone(true).appendTo($wrapper).find('input').val('').focus();
});
$('.multi-field .remove-field', $wrapper).click(function() {
if ($('.multi-field', $wrapper).length > 1)
$(this).parent('.multi-field').remove();
});
$('button[type="submit"]').on('click', function(el) {
el.preventDefault();
alert( JSON.stringify( $('form').serializeArray() ) );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form role="form" action="/wohoo" method="POST" class="data">
<label>Variable 1, Variable 2</label>
<div class="multi-field-wrapper">
<div class="multi-fields">
<div class="multi-field">
<input type="text" name="Var1[]">
<input type="text" name="Var2[]">
<button type="button" class="remove-field">Remove</button>
</div>
</div>
<button type="button" class="add-field">Add field</button>
<button type="submit"> Submit </button>
</div>
</form>