【问题标题】:Javascript push multidimensional array only checked checkboxesJavascript推送多维数组仅选中复选框
【发布时间】:2015-08-24 02:14:06
【问题描述】:

我在页面上有复选框,我只想在更改每个复选框时发布选中的值

$(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);
                }
            });
        });
    });

【问题讨论】:

标签: javascript jquery arrays multidimensional-array


【解决方案1】:

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>

【讨论】:

  • @DmitrijHolkin,它给出了这个例外,因为在执行时favorite[$(this).attr("name")] 未定义
  • @DmitrijHolkin,如果您尝试任何其他属性,例如favorite[$(this).attr("name")].wakawaka = 1;,就会发生这种情况
  • 未捕获的引用错误:未定义收藏夹
  • $(this).attr("name") 必须是一个数字(或字符串数​​字),例如 1"1"。如果$(this).attr("name")"foo""01" 之类的字符串,则此代码无效。
  • 如果$(this).attr("name") 是像foo 这样的字符串favorite 必须是对象{} 而不是数组[]
【解决方案2】:

在 jquery 中使用 map() 。将数组或对象中的所有项目转换为新的项目数组。

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

}).get();

Fiddle Demo

【讨论】:

  • 注意使用Object 代替Array$(this).attr("name") 可能与数字不同。它可以防止很多错误。不错!
  • 在 POST 请求中总是返回 undefined
猜你喜欢
  • 1970-01-01
  • 2012-03-17
  • 2018-10-07
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 2014-05-29
相关资源
最近更新 更多