Jquery按复选框名称获取所有复选框和组

时间:2015-06-26 10:51:47

标签: javascript jquery

您好我有不同名字的checbox:

名称 - 小时和价值 - 日。例如:value =“1”表示星期一,name =“0609”表示从06am - 09am。

<input type="checkbox" value="1" name="0609">
<input type="checkbox" value="2" name="0609">
...
<input type="checkbox" value="7" name="0609">

<input type="checkbox" value="1" name="0912">
<input type="checkbox" value="2" name="0912">
...
<input type="checkbox" value="7" name="0912">

我需要接受所有已检查和未检查的输入并按名称组合成数组,例如:如果除星期一以外都检查所有日期

'0609' => 0, 1, 1, 1, 1, 1, 1

我该如何解决这个问题?

我试图使用.map,但我得到了未分组的值......

        var valuess = $('input:checked').map(function() {
            return this.value;
        }).get();
        console.log(valuess);

更新:

        var obj = {}; // Define object

        // Loop over all checkboxes
        $('input[type=checkbox]').each(function() {
            var name = $(this).attr('name'); // Get name of this checkbox
            var sThisVal = (this.checked ? "1" : "0");
            if (obj[name]) {
                obj[name].push(sThisVal); // Push value
            } else {
                obj[name] = [sThisVal]; // Create array and push value
            }
        });
        console.log(obj);

5 个答案:

答案 0 :(得分:2)

检查一下:

var obj = {}; // Define object

// Loop over all checkboxes
$(':checkbox').each(function() {
    var name = $(this).attr('name'); // Get name of this checkbox

    if (obj[name]) {
        obj[name].push($(this).val()); // Push value
    } else {
        obj[name] = [$(this).val()]; // Create array and push value
    }
});
console.log(obj);

答案 1 :(得分:0)

我认为你可以做到这一点

$("input[name='0609']").each( function () {
  //do somethin
});

答案 2 :(得分:0)

首先,循环遍历所有复选框,获取其名称属性,然后创建一个数组(不重复)。

然后,遍历此数组并创建最后注销的对象。

检查控制台并查看您正在获取的对象。

&#13;
&#13;
var nm = [];
$('input[type="checkbox"]').each(function() {
  var name = $(this).attr('name'); 
  if ($.inArray(name, nm) == -1) {
    nm.push(name);
  }
});
var arr = [];
for (i=0;i<nm.length;i++) {
  var obj = {};
  obj.name = nm[i];
  var days = obj.days = {};
  $('input[name=' + nm[i] + ']').each(function() {    
    var that = $(this);
    var val = that.attr('value');
    if (that.is(':checked')) {
      days[val] = 1;
    } else {
      days[val] = 0;
    }
  });
  arr.push(obj);
}
console.log(arr);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" value="1" name="0609">
<input type="checkbox" value="2" name="0609" checked>
<input type="checkbox" value="7" name="0609">
<input type="checkbox" value="1" name="0912">
<input type="checkbox" value="2" name="0912">
<input type="checkbox" value="7" name="0912">
&#13;
&#13;
&#13;

答案 3 :(得分:0)

var obj = {};
obj.checked = {};
obj.unchecked = {};
$(':checkbox').each(function() {
//console.log(this);
$this = $(this);
var key = $this.attr("checked") ? "checked" : "unchecked";
var index = $this.attr("name");
if(!obj[key][index]) {
  obj[key][index] = [];
}
obj[key][index].push($this.val());

});

的console.log(OBJ);

答案 4 :(得分:0)

这是小提琴http://jsfiddle.net/pratbhoir/d8p04tn5/

function getData() {
    var obj = {}; // Define object
    // Loop over all checkboxes
    $(':checkbox').each(function () {
        var name = $(this).attr('name'); // Get name of this checkbox
        var isChecked = 0;
        if ($(this).is(":checked")) {
            isChecked = 1;
        }
        var dayIndex = $(this).val() - 1; //Get the dayIndex from value
        if (obj[name]) {
            obj[name][dayIndex] = isChecked; //set 1 to the value
        } else {
            obj[name] = [0, 0, 0, 0, 0, 0, 0]; // Create array and push value
            obj[name][dayIndex] = isChecked; //Set 1 to the array
        }
    });
    console.log(obj);
}