分组复选框选择

时间:2016-01-22 18:14:06

标签: javascript jquery

我有一系列复选框,我正在尝试按名称对选择进行分组,并将选择存储为集合。所以我追求的最终输出是这样的

welcome

实际上它并没有那样发生。它在这些数组周围添加“”,如果我只选择一个复选框,则不会将其包装在数组中。

这是我的JS

{
'E113': [{'id':'sxk1', value: '19'}, {'id':'sxk22', value: '29'}],
'E013': [{'id':'kxk1', value: '22'}, {'id':'sxk3', value: '15'}]
}

这是我的小提琴

https://jsfiddle.net/sghoush1/xLxezzLz/1/

以下是我的标记

$(".checkbox").click(function() {

      var selectionForm = JSON.stringify($('#form').serializeObject())
      console.log(selectionForm)

    })

$.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name] !== undefined) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    }; 

2 个答案:

答案 0 :(得分:2)

您编写的JSON使用单引号'这是无效的,您应该使用双引号"。您的value也需要报价。

<input type="checkbox" class="checkbox" name="E113" value='{"id":"sxk1", "value": "19"}'/>
<input type="checkbox" class="checkbox" name="E113" value='{"id":"sxk22", "value": "29"}'/>
<input type="checkbox" class="checkbox" name="E013" value='{"id":"kxk1", "value": "22"}'/>
<input type="checkbox" class="checkbox" name="E013" value='{"id":"sxk3", "value": "15"}'/>

然后,当向现有数组追加/推送数据时,使用JSON.parse来检索Javascript对象而不是文本字符串:JSON.parse(this.value)

修正小提琴:https://jsfiddle.net/rs108uLm/

答案 1 :(得分:1)

&#13;
&#13;
$('.checkbox').on('click', function() {

  var o = {};
  $('.checkbox:checked').each(function() {
    var n = $(this).attr("name"),
      // Convert your value into valid JSON (otherwise we'd have to use eval, which, no):
      v = $(this).val().replace(/\'/g,'"').replace(/value:/,'"value":');
   
    if (o[n]) {
      o[n].push(JSON.parse(v));
    } else {
      o[n] = [JSON.parse(v)];
    }
  });
  $('.output').html(JSON.stringify(o));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" class="checkbox" name="E113" value="{'id':'sxk1', value: '19'}" />
<input type="checkbox" class="checkbox" name="E113" value="{'id':'sxk22', value: '29'}" />
<input type="checkbox" class="checkbox" name="E013" value="{'id':'kxk1', value: '22'}" />
<input type="checkbox" class="checkbox" name="E013" value="{'id':'sxk3', value: '15'}" />

<div class="output"></div>
&#13;
&#13;
&#13;

如果你清理输入数据,你可以避免使用其中一些正则表达式(使用有效的JSON而不是引用和未引用字段的混合。)其余的非常简单,我假设不言自明。