我正在尝试获取复选框名称和值的对象。假设我有这种形式:
<form>
<input type="checkbox" name="email" />
<input type="checkbox" name="name" />
<input type="checkbox" name="hi" />
假设第一个和第三个被检查,我想要这个obj:
{ email: 1, name: 0, hi: 1 }
这是我试过的:
$(':checkbox').map(function() { return this.name + '=' + (this.checked ? 1 : 0) } }).get();
这让我:
['email=1', 'name=0', 'hi=1']
但我不知道从这里做了什么。
我是不是错了?
答案 0 :(得分:4)
根据the .map()
method doco,.map()
返回“jQuery包装的数组”。鉴于你想要一个对象,你可以改为做这样的事情:
var checkboxes = {};
$(':checkbox').each(function() {
checkboxes[this.name] = this.checked ? 1 : 0;
});
注意如果您有相同名称的复选框(对于html表单而言是有效的),那么您的对象将只保留每个名称的最后一个复选框的值。
答案 1 :(得分:1)
您可以尝试使用关联数组语法设置属性:ob["property"] = ...
看到这个工作小提琴:http://jsfiddle.net/tuando/JwYFz/
答案 2 :(得分:1)
'='
,您希望函数返回JavaScript代码,然后使用eval
运行。这不是JavaScript的运作方式。由于您将this.name
与字符串和数字连接起来,JavaScript会执行其隐式type coercion并从函数返回一个字符串,因此您将获得一个字符串数组。
.map()
函数将始终返回数组;对于不返回数组的其他操作,应使用泛型.each()
迭代器。
这是一个快速插件,可以满足您的需求。
$.fn.serializeCheckboxes = function() {
var ret = {};
this.each(function(ix,elm) {
ret[elm.name] = elm.checked ? 1 : 0;
});
return ret;
}
答案 3 :(得分:1)
试试这个:
$('input[type="checkbox"]').each(function() {
var name = $(this).attr('name');
obj[name] = $(this).is(':checked') ? 1 : 0;
});