向使用$. serializearray()检索的数组中添加数组值
Adding an array value to an array retrieved using $.serializeArray()
有复选框,属于表单A:
<input type="checkbox" class="item-selector" name="item[]" value="1" />
<input type="checkbox" class="item-selector" name="item[]" value="2" />
<input type="checkbox" class="item-selector" name="item[]" value="3" />
<!-- etc. -->
然后我有表单B,需要表单A的复选框值。表单A也可能有其他输入字段,但我对这些不感兴趣。我只关心$('input.item-selector')
。我是这样写的:
var postData = $('#form-a').serializeArray();
var items = $('.item-selector:checked').map(function(){
return this.value;
}).get();
if(items.length > 0) {
postData.push({name: 'itemId', value: items});
}
但是这种向postData
添加东西的方式似乎不起作用,因为我发送表单的PHP脚本找不到itemId
。有趣的是,这确实有效:
postData.push(name: 'aName', value: 'notAnArrayButAStringValue');
我也尝试了一些像这样的解决方案:http://benalman.com/projects/jquery-misc-plugins/#serializeobject但他们的问题是,虽然他们工作得很好,但出于某种原因,如果在表格B中有复选框,表格B的复选框值被错误地解析,导致空值和数据丢失。它看起来像这样:
var postData = $(this.form).serializeObject();
var items = $('.item-selector:checked').map(function(){
return this.value;
}).get();
if(items.length > 0) {
postData.itemId = items;
}
使用JSON。Stringify显示对象结构是这样的:
{
"name":"Simon J. Kok",
"address_id":"39669",
"email":"*****",
"content_id":"21921",
"client_id":"42101",
"is_ebill":["","1"], <-- this is a checked checkbox
"is_banned":"", <-- this is an unchecked checkbox
"button":"save"
}
表单B中的复选框看起来像
<input type="checkbox" value="1" name="is_ebill" />
<input type="checkbox" value="1" name="is_banned" />
所以我需要的是关于如何将复选框从形式A添加到$.serializeArray()
结果数组的一些见解-或-一种解决使用Ben Alman插件时返回数组的复选框问题的方法。
这是一种方法。首先,它需要form-b
中的隐藏字段:
<input type="hidden" id="itemId" name="itemId" value="" />
在提交表单时将使用item-selector
数据填充:
$('#form-b').on('submit', function() {
var checkedValues = [];
$('.item-selector:checked').each(function() {
checkedValues.push($(this).val());
});
$('#itemId').val(checkedValues.join(','));
console.debug('Form B data:', $('#form-b').serializeArray());
});
调整语法以适应您的习惯用法。下面是一个示例:
http://jsfiddle.net/klenwell/12evxfvc/实际上我已经回答了我自己的问题。我使用JSON.Stringify
来输出$.serializeArray()
返回的JSON格式字符串,并且很明显该结构需要工作。下面是如何将数组值逐个添加到使用$.serializeArray()
:
var items = $('.item-selector:checked').map(function(){
return this.value;
}).get();
$.each(items, function(i, v){
postData.push({name: 'itemId[]', value: v});
});
相关文章:
- 向多维数组添加值和从多维数组请求值
- 如何将JS数组添加到Meteor自动表单条目中
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- 将行从数组添加到谷歌图表
- 从不同的数组添加重复的图块 PIXI.js
- 如何在 Javascript 中向数组添加其他对象
- 将javascript数组添加到多维数组中
- Coderbyte数组添加解决方案--For循环与For循环
- Knockout.js向数组添加新项
- Highcharts将变量数组添加到序列中
- 向javascript对象数组添加值
- 我可以用Javascript向数组添加函数吗
- 将数组添加到另一个数组
- 你能给被劫持的JavaScript数组添加一个函数吗
- 我可以向数组添加对象键吗
- 如何向JSON数组添加新属性
- 通过将$resource查询数组添加到AngularJS中另一个数组的底部来进行分页加载
- 使用名称/值从 json 数组添加项
- Javascript数组添加 - 所有组合
- 从 json 文件向 javascript 数组添加值