Javascript push только для многомерного массива отмечены флажками

У меня есть флажки на странице, и я хочу POST только проверенные значения onchange каждый флажок

$(function () {
    $('.list input').change(function (e) {
        //e.preventDefault();
        var favorite = [];
        $.each($(".list input[type='checkbox']:checked"), function () {
            favorite[$(this).attr("name")].push = $(this).val();
        });

        var str;
        str = $.param(favorite);

        $.ajax({
            url: '/schema.asp',
            type: 'POST',
            data: str,
            dataType: 'text',
            success: function (response) {
                alert(response);
            }
        });
    });
});

Но я не могу сделать правильный синтаксис, чтобы подтолкнуть проверено в массив

$.each($(".list input[type='checkbox']:checked"), function () {
    favorite[$(this).attr("name")].push = $(this).val();
});

Пожалуйста, покажите правильный путь.

$ (this).attr ("name") может отличаться от (Make[],Model[],Year()) и должно быть строкой

РЕШИТЬ:

Поскольку никто не отвечает с полным ответом, это последний рабочий код

    $(function () {
        $('.list input').change(function (e) {
            //e.preventDefault();
            var favorite = {};
            $.each($(".list input[type='checkbox']:checked"), function(){ 
            if(typeof(favorite[$(this).attr("name")]) == 'undefined'){
                favorite[$(this).attr("name")] = [];
            }           
            favorite[$(this).attr("name")].push($(this).val());
        });

            var str;
            str = $.param(favorite);

            $.ajax({
                url: '/schema.asp',
                type: 'POST',
                data: str,
                dataType: 'text',
                success: function (response) {
                    alert(response);
                }
            });
        });
    });

2 ответа

Решение

push - это вызываемая функция, а не свойство, которое нужно установить

var favorite = {};
$.each($(".list input[type='checkbox']:checked"), function(){ 
    if(typeof(favorite[$(this).attr("name")]) == 'undefined'){
        favorite[$(this).attr("name")] = [];
    }           
    favorite[$(this).attr("name")].push($(this).val());
});

Кроме того, обратите внимание выше, вам нужно проверить, было ли установлено это свойство для объекта или нет, чтобы инициализировать его как массив.

$('.list input').change(function(e) {
  //e.preventDefault();
  var favorite = [];
   $.each($(".list input[type='checkbox']:checked"), function(){ 
                if(typeof(favorite[$(this).attr("name")]) == 'undefined'){
                    favorite[$(this).attr("name")] = [];
                }           
                favorite[$(this).attr("name")].push($(this).val());
            });
  console.log(favorite);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<ul class="list">
  <li>
    <input type="checkbox" name="one" value="1" />
  </li>
  <li>
    <input type="checkbox" name="two" value="2" />
  </li>
  <li>
    <input type="checkbox" name="one" value="1" />
  </li>
  <li>
    <input type="checkbox" name="two" value="2" />
  </li>
  <li>
    <input type="checkbox" name="one" value="1" />
  </li>
</ul>

Используйте map() в jquery. Переведите все элементы в массиве или объекте в новый массив элементов.

favorite = $(".list input[type='checkbox']:checked").map(function () {
    var obj = {};
    obj[$(this).attr("name")] = this.value;
    return obj;

}).get();

Скрипка Демо

Другие вопросы по тегам