简单的jQuery过滤器功能不能正常工作

Simple jQuery filter function doesn't work properly

本文关键字:常工作 工作 能不能 jQuery 过滤器 功能 简单      更新时间:2023-09-26

问题说明:我在DOM周围放置了输入元素:

<input type="checkbox" data-filter="markets" data-cid="4" name="checkbox">
<input type="checkbox" data-filter="categories" data-cid="30" name="checkbox">

当我选中任何复选框时,我应该得到这样的JSON对象:

{"categories":["4,5"],"markets":["30,31,32"]}

但是我得到了这样的对象:

{"categories":["30,31,32,4,5"],"markets":["30,31,32,4,5"]} 
其中30,31,32为市场,4,5为类别。也许有人能告诉我,问题出在哪里?
$(document).on('change',"input[name=checkbox]", function() {
    page = 0;
    var $this = $(this);
    if ($this.prop('checked')) {
        $this.addClass("checked");   
    } else {
        $this.removeClass("checked");
    }
    filter();
});
var filter = function() {
    var myObject = new Object(); 
    $('.checked').each(function(n) {            
        var objname = $(this).data('filter');
        arr = $('.checked').map(function() {
            return $(this).data('cid');
        }).get().join(",");
        if(arr.length > 0) {
            myObject[ objname ] = [ arr ];            
        }
    });
    console.log(JSON.stringify(myObject));
    return JSON.stringify(myObject);
}
filter();

Try

var filter = function () {
    var myObject = {};
    $('.checked').each(function (n) {
        var objname = $(this).data('filter');
        var array = myObject[objname] = myObject[objname] || [];
        array.push($(this).data('cid'))
    });
    console.log(JSON.stringify(myObject));
    return JSON.stringify(myObject);
}

演示:小提琴