Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript推送()未按预期工作_Javascript_Jquery - Fatal编程技术网

javascript推送()未按预期工作

javascript推送()未按预期工作,javascript,jquery,Javascript,Jquery,在发送到ajax帖子之前,我想在数组中添加一些复选框信息,但当它循环通过复选框时,似乎会增加数组中的项目数,但会使数组中的每个条目都具有相同的内容。这是我的密码 var aData = []; var item = []; $(".providers_chk").each(function (index, element) { if ($(this).attr("checked")) { item[0] = element.value; item[1] =

在发送到ajax帖子之前,我想在数组中添加一些复选框信息,但当它循环通过复选框时,似乎会增加数组中的项目数,但会使数组中的每个条目都具有相同的内容。这是我的密码

var aData = [];
var item = [];
$(".providers_chk").each(function (index, element) {
    if ($(this).attr("checked")) {
        item[0] = element.value;
        item[1] = element.name;
        aData.push(item);
        console.log(aData);
    }
});

对于每个条目,数组看起来都像{“foo”,“bar”},而不是{“foo”,“bar”},{“foo1”,“bar1”},{“foo2”,“bar2}等。您正在更新并在回调函数中推送相同的数组引用。相反,在回调函数中使用局部变量,或者直接生成数组并推送到
aData
数组

尽管您可以在回调中使用
this
引用元素,因此不需要使用回调参数

var aData = [];
$(".providers_chk").each(function () {
  if (this.checked) { // check the checked property
     aData.push([this.value, this.name]);
   }
});
$('.providers_chk').change(函数(){
变量aData=[];
$(“.providers_chk”)。每个(函数(){
如果(选中此项){
aData.push([this.value,this.name]);
}
});
console.log(aData);
});

您正在更新并在回调函数中推送相同的数组引用。请改为在回调函数中使用局部变量,或直接生成数组并推送到
aData
数组

尽管您可以在回调中使用
this
引用元素,因此不需要使用回调参数

var aData = [];
$(".providers_chk").each(function () {
  if (this.checked) { // check the checked property
     aData.push([this.value, this.name]);
   }
});
$('.providers_chk').change(函数(){
变量aData=[];
$(“.providers_chk”)。每个(函数(){
如果(选中此项){
aData.push([this.value,this.name]);
}
});
console.log(aData);
});

var项=[];
移动到
中,如果

if ($(this).attr("checked")) {
    var item = [];
    item[0] = element.value;
    item[1] = element.name;
    aData.push(item);
    console.log(aData);
}
循环的每次迭代都在修改相同的
数组。您推送到
aData
的每个
都只是对相同
var项
的引用

一个较短的选项是根本不创建临时变量:

if ($(this).attr("checked")) {
    aData.push([element.value, element.name]);
    console.log(aData);
}
下面是一个例子来说明这个问题:

var item=['foo'];//就像您的'item'`
var列表=[];
while(列表长度<5)
list.push(item);//将其添加到列表中5次
log(JSON.stringify(list));
列表[0][0]=“bar”;//编辑列表内容中的第一个“项”

console.log(JSON.stringify(list));
var项=[];
移动到
中,如果

if ($(this).attr("checked")) {
    var item = [];
    item[0] = element.value;
    item[1] = element.name;
    aData.push(item);
    console.log(aData);
}
循环的每次迭代都在修改相同的
数组。您推送到
aData
的每个
都只是对相同
var项
的引用

一个较短的选项是根本不创建临时变量:

if ($(this).attr("checked")) {
    aData.push([element.value, element.name]);
    console.log(aData);
}
下面是一个例子来说明这个问题:

var item=['foo'];//就像您的'item'`
var列表=[];
while(列表长度<5)
list.push(item);//将其添加到列表中5次
log(JSON.stringify(list));
列表[0][0]=“bar”;//编辑列表内容中的第一个“项”

console.log(JSON.stringify(list));
在代码中,您只使用一个数组进行推送,每个循环都会得到新值。最后,当对同一对象的引用分布在结果数组上时,您在所有推送数组中都会得到相同的值

您可以动态创建数组,这些数组不通过引用链接在一起

var aData = [];
$(".providers_chk").each(function (index, element) {
    if ($(this).attr("checked")) {
        aData.push([element.value, element.name]);
        console.log(aData);
    }
});

在代码中,您只使用一个数组进行推送,这会为每个循环获取新值。最后,当对同一对象的引用分布在结果数组上时,您会在所有推送数组中获得相同的值

您可以动态创建数组,这些数组不通过引用链接在一起

var aData = [];
$(".providers_chk").each(function (index, element) {
    if ($(this).attr("checked")) {
        aData.push([element.value, element.name]);
        console.log(aData);
    }
});
希望它对你有用:)

希望它对您有用:)

使用
.map()
函数根据选择器的每个匹配元素返回一个数组。在回调中,您应该返回一个新数组,而不是重复使用代码中的相同数组

var aData = $('.providers_chk:checked').map(function() {
    return [[this.value, this.name]];
}).get();
嵌套数组是必需的,因为jQuery会自动展平返回的数组,因此您必须将其包装在一个额外的级别中,以便在最终结果中获得一个二维数组。

使用
.map()
函数根据选择器的每个匹配元素返回一个数组。在回调中,您应该返回一个新数组,而不是重复使用代码中的相同数组

var aData = $('.providers_chk:checked').map(function() {
    return [[this.value, this.name]];
}).get();

嵌套数组是必需的,因为jQuery会自动展平返回的数组,所以您必须将其包装在一个额外的级别中,以便在最终结果中得到一个二维数组。

{“foo”,“bar”}
不是有效语法。您不需要
if()
,您可以使用选择器
。提供者\u chk:checked
{“foo”bar“}
不是有效语法。不需要
if()
,你可以使用选择器
。提供者。\u chk:checked
jQuery.map
:checked
选择器如何?不是很容易吗?顺便说一句,我不是被否决的选民。@Rayon:这是一个完全不同的答案。@Cerbrus-同意!不确定为什么会有这么多被否决的原因:(关于
jQuery.map
:选中的
选择器如何?)更简单,不是吗?顺便说一句,我不是下一个投票人。@Rayon:这是一个完全不同的答案。@Cerbrus-同意!不确定为什么这么多的下一个投票没有说明原因:(这可能会导致
[“foo”,“bar”,“foo1”,“bar1”…)
…根据jQuery映射文档…
如果返回数组,数组中的元素将插入集合。
哇,我不时了解jQuery的一些新情况。我添加了额外的包装。这可能会导致
[“foo”、“bar”、“foo1”、“bar1”…]
…根据jQuery映射文档…
如果返回数组,数组中的元素将插入集合。
哇,我不时了解jQuery的一些新内容。我添加了额外的包装。