我正在尝试获取当前选中的所有复选框的值,并将它们存储到数组中。到目前为止,这是我的代码:
$("#merge_button").click(function(event){
event.preventDefault();
var searchIDs = $("#find-table input:checkbox:checked").map(function(){
return $(this).val();
});
console.log(searchIDs);
});
然而,这比我需要的更多。我不仅得到了价值,还有其他一些我不想要的东西。
[“51729b62c9f2673e4c000004”,“517299e7c9f26782a7000003”, “51729975c9f267f3b5000002”,prevObject:jQuery.fn.jQuery.init [3], context:document,jquery:“1.9.1”,构造函数:function,init: 功能...]
我想要ID(在这种情况下前3项)。
通过使用$.each
并将值推送到数组,我得到了所需的输出:
$("#find-table input:checkbox:checked").each(function(){ myArray.push($(this).val()); })
[“51729b62c9f2673e4c000004”,“517299e7c9f26782a7000003”, “51729975c9f267f3b5000002”]
但是我想使用$.map
,因为它为我节省了一行代码并且更漂亮。
由于
答案 0 :(得分:236)
在最后调用.get()
将生成的jQuery对象转换为真正的数组。
$("#merge_button").click(function(event){
event.preventDefault();
var searchIDs = $("#find-table input:checkbox:checked").map(function(){
return $(this).val();
}).get(); // <----
console.log(searchIDs);
});
由于返回值是一个包含数组的jQuery对象,在结果上调用.get()以使用基本数组非常常见。
答案 1 :(得分:20)
DEMO:http://jsfiddle.net/PBhHK/
$(document).ready(function(){
var searchIDs = $('input:checked').map(function(){
return $(this).val();
});
console.log(searchIDs.get());
});
只需调用get(),就可以获得规范中编写的数组:http://api.jquery.com/map/
$(':checkbox').map(function() {
return this.id;
}).get().join();
答案 2 :(得分:18)
您需要将.toArray()
添加到.map()
功能
$("#merge_button").click(function(event){
event.preventDefault();
var searchIDs = $("#find-table input:checkbox:checked").map(function(){
return $(this).val();
}).toArray();
console.log(searchIDs);
});
答案 3 :(得分:10)
我重构了你的代码并相信我带来了你正在寻找的解决方案。基本上,不是将searchIDs
设置为.map()
的结果,而是将值推送到数组中。
$("#merge_button").click(function(event){
event.preventDefault();
var searchIDs = [];
$("#find-table input:checkbox:checked").map(function(){
searchIDs.push($(this).val());
});
console.log(searchIDs);
});
我创建了一个代码正在运行的fiddle。
答案 4 :(得分:5)
var ids = [];
$('input[id="find-table"]:checked').each(function() {
ids.push(this.value);
});
这个对我有用!
答案 5 :(得分:1)
需要将HTML中指定的表单元素作为数组作为javascript对象中的数组,就好像表单实际已提交一样。
如果表单中有多个复选框,例如:
<input name='breath[0]' type='checkbox' value='presence0'/>
<input name='breath[1]' type='checkbox' value='presence1'/>
<input name='breath[2]' type='checkbox' value='presence2'/>
<input name='serenity' type='text' value='Is within the breath.'/>
...
结果是一个对象:
data = {
'breath':['presence0','presence1','presence2'],
'serenity':'Is within the breath.'
}
var $form = $(this),
data = {};
$form.find("input").map(function()
{
var $el = $(this),
name = $el.attr("name");
if (/radio|checkbox/i.test($el.attr('type')) && !$el.prop('checked'))return;
if(name.indexOf('[') > -1)
{
var name_ar = name.split(']').join('').split('['),
name = name_ar[0],
index = name_ar[1];
data[name] = data[name] || [];
data[name][index] = $el.val();
}
else data[name] = $el.val();
});
这里有很多答案可以帮助改进我的代码,但它们要么太复杂,要么根本不想要我想要:Convert form data to JavaScript object with jQuery
工作但可以改进:仅适用于一维数组,结果索引可能不是连续的。数组的length属性返回下一个索引号,作为数组的长度,而不是实际的长度。
希望这有帮助。合十!
答案 6 :(得分:1)
var idsArr = [];
$('#tableID').find('input[type=checkbox]:checked').each(function() {
idsArr .push(this.value);
});
console.log(idsArr);
答案 7 :(得分:0)
不要使用&#34;每个&#34;。它用于同一元素中的操作和更改。使用&#34; map&#34;从元素主体中提取数据并在其他地方使用它。
答案 8 :(得分:0)
这里允许页面上的复选框类,var允许在数组中收集它们,您可以在for循环中检查checked true,然后单独执行所需的操作。我在这里设定了自定义有效性。我认为它会解决你的问题。
$(".allows").click(function(){
var allows = document.getElementsByClassName('allows');
var chkd = 0;
for(var i=0;i<allows.length;i++)
{
if(allows[i].checked===true)
{
chkd = 1;
}else
{
}
}
if(chkd===0)
{
$(".allows").prop("required",true);
for(var i=0;i<allows.length;i++)
{
allows[i].setCustomValidity("Please select atleast one option");
}
}else
{
$(".allows").prop("required",false);
for(var i=0;i<allows.length;i++)
{
allows[i].setCustomValidity("");
}
}
});