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;
});