jQuery克隆元素,然后用连接的结果填充隐藏字段,以避免空列表问题
jQuery Cloning Elements then populating hidden field with concatenated results to avoid empty list issue
我从朋友的博客中得到一些代码,使用jQuery复制表单元素,效果很好:
$('#btnAdd').click(function() {
var num = $('.clonedInput').length; // how many "duplicatable" input fields we currently have
var newNum = new Number(num + 1); // the numeric ID of the new input field being added
// create the new element via clone(), and manipulate it's ID using newNum value
var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);
// manipulate the name/id values of the input inside the new element
newElem.children(':first').attr('id', 'name' + newNum).attr('name', 'name' + newNum);
// insert the new element after the last "duplicatable" input field
$('#input' + num).after(newElem);
// enable the "remove" button
$('#btnDel').attr('disabled','');
// business rule: you can only add 5 names
if (newNum == 5)
$('#btnAdd').attr('disabled','disabled');
});
$('#btnDel').click(function() {
var num = $('.clonedInput').length; // how many "duplicatable" input fields we currently have
$('#input' + num).remove(); // remove the last element
// enable the "add" button
$('#btnAdd').attr('disabled','');
// if only one element remains, disable the "remove" button
if (num-1 == 1)
$('#btnDel').attr('disabled','disabled');
});
这适用于包含"address1,address2,city,state,zip"字段的地址块。这样,当提交表单时,我只需遍历列表以将值插入到表中。但是因为address2中并不总是有一个条目,所以我得到的列表并不能告诉我它实际上属于哪个列表元素。
所以,另一个朋友建议,在表单提交时,我从表单字段中获取值,将分隔符更改为|(一个好主意)并将它们填充到隐藏字段中(我称之为hidden_address1, hidden_address2, hidden_city等)。然后他给了我这个代码,这个代码不工作:
var values = [];
$('.address1').each(function() {
values.push($(this).val());
});
$('#hidden_field').val(values.join('|'));
所以我在五个字段上复制了这个,增加了值。长度= 0;
这是我不太擅长的jQuery领域。我做错了什么?:)
首先,我建议每次将values
变量设置为一个新的空数组,而不是将长度设置为0:
values = [] //instead of values.length = 0
但是它不起作用的真正原因是因为你选择了像这样的隐藏表单:
$('#hidden_address1').val(values.join('|'));
但是HTML中的表单是这样的:
<input type="hidden" value="" name="hidden_address1">
所以你试图选择一个ID为hidden_address1
的元素,但没有这样的元素存在,你隐藏的表单没有ID。您需要将标记更改为:
<input type="hidden" value="" name="hidden_address1" id="hidden_address1">
这应该能解决你的问题
相关文章:
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- 带有验证和隐藏字段值的提交按钮
- 主干窗体隐藏字段未呈现
- 清除以前的$_GET值或不获取仅隐藏字段的值
- 添加和删除隐藏字段数组中的值,而不提交表单
- 在控制器上使用“$watch”时,为什么不更新此隐藏字段
- 将选项值附加到隐藏字段
- JQuery获取隐藏字段的值
- HTML提交表单,同时包含空字段检查和按钮隐藏
- MVC+访问控制器中的隐藏字段
- 如何隐藏&使用jQuery禁用依赖于另一个字段值的字段
- ASP.net Javascript函数中的隐藏字段为null
- 在第一页加载时隐藏字段,而不是在php发布之后
- 使用JavaScript获取隐藏的Django字段
- 提交表单时,显示或识别隐藏的必填字段并将其集中
- 表单使用js、html,而不是隐藏字段
- HTML5要求隐藏文件字段-反馈位置
- 当javascript中的强制字段隐藏在条件中时,如何限制它们的验证
- 为隐藏字段隐藏jquery验证器消息
- 如何使一些字段隐藏取决于其他字段的值AngularJS, Razor, c#