Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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_Forms - Fatal编程技术网

Javascript 返回复选框值的对象

Javascript 返回复选框值的对象,javascript,jquery,forms,Javascript,Jquery,Forms,我正在尝试获取包含复选框名称和值的对象。假设我有这个表格: <form> <input type="checkbox" name="email" /> <input type="checkbox" name="name" /> <input type="checkbox" name="hi" /> 以下是我尝试过的: $(':checkbox').map(function() { return this.name + '=' + (this.ch

我正在尝试获取包含复选框名称和值的对象。假设我有这个表格:

<form>
<input type="checkbox" name="email" />
<input type="checkbox" name="name" />
<input type="checkbox" name="hi" />
以下是我尝试过的:

$(':checkbox').map(function() { return this.name + '=' + (this.checked ? 1 : 0) } }).get();
这给了我:

['email=1', 'name=0', 'hi=1']
但我不知道从这里该怎么办


我这样做错了吗?

您可以尝试使用关联数组语法设置属性:
ob[“property”]=…

查看此工作小提琴:

根据,
.map()
返回“一个jQuery包装的数组”。如果您想要一个对象,您可以这样做:

var checkboxes = {};
$(':checkbox').each(function() {
    checkboxes[this.name] = this.checked ? 1 : 0;
});

注意,如果您有同名的复选框(对于html表单来说,这是有效的),那么您的对象将只保留每个名称的最后一个复选框的值。

是的,您的做法是非常错误的。使用
'='
时,您似乎希望函数返回JavaScript代码,然后使用
eval
运行该代码。这不是JavaScript的操作方式。由于您将
this.name
与一个字符串和一个数字连接在一起,JavaScript执行其隐式操作并从函数返回一个字符串,因此您得到一个字符串数组

函数
.map()
将始终返回一个数组
;对于不返回数组的杂项操作,应使用泛型
.each()
迭代器

这里有一个快速插件,可以满足您的需要

$.fn.serializeCheckboxes = function() {

    var ret = {};
    this.each(function(ix,elm) {
        ret[elm.name] = elm.checked ? 1 : 0;
    });
    return ret;
}
试试这个:

$('input[type="checkbox"]').each(function() {
        var name = $(this).attr('name');
        obj[name] = $(this).is(':checked') ? 1 : 0;
 });

请注意,如果使用
this.name
this.checked
而不是使用
$(this)
创建一个新的jQuery对象(两次!),则可以提高效率并使其更易于阅读。
$('input[type="checkbox"]').each(function() {
        var name = $(this).attr('name');
        obj[name] = $(this).is(':checked') ? 1 : 0;
 });