【问题标题】:Object doesn't support property or method 'push'对象不支持属性或方法“推送”
【发布时间】:2015-05-11 09:58:13
【问题描述】:

我的网页上有一个隐藏字段,我想存储一组对象。这个的html是:

<div><input type="hidden" id="CheckedSubGroups" value="[]" /></div>

然后我有以下 jQuery:

 $(".SubGroupCheckBoxes").on("click", function() {
            if ($(this).is(':checked')) {
                var array = $("#CheckedSubGroups").val();
                array.push('test object');
                $("#CheckedSubGroups").val(array);
            } else
                // do other stuff

这会导致“此对象不支持推送属性或方法”错误

在调试器中,我停在这一行并检查了以“[]”形式给出的数组对象的值

【问题讨论】:

  • 返回的值是一个字符串,因此你不能推送到它。最好创建一个实际数组,将其推送到该数组并将其存储在formdata 属性中,但这取决于您以后希望如何访问信息。
  • 包含字符[]的字符串与数组不同。
  • var 数组不是其返回字符串的数组
  • 你试过用 JSON 处理它吗?喜欢...array = JSON.parse(...val());....val(JSON.stringify(array);
  • 同时发布您的(相关)HTML。在复选框上使用change 事件。

标签: javascript jquery html


【解决方案1】:

您是否尝试使用 JSON 来处理它?喜欢...
var array = JSON.parse($("#CheckedSubGroups").val());
$("#CheckedSubGroups").val(JSON.stringify(array);

$(".SubGroupCheckBoxes").on("click", function() {
    if (this.checked) {
        var array = JSON.parse($("#CheckedSubGroups").val());
        array.push('test object');
        $("#CheckedSubGroups").val(JSON.stringify(array));
    } else
        // do other stuff
    }
});

【讨论】:

    【解决方案2】:

    我认为$("#CheckedSubGroups").val() 可能会返回一个字符串而不是一个数组。

    所以你应该在调用push方法之前将此字符串转换为数组

    var array = JSON.parse($("#CheckedSubGroups").val());
    

    【讨论】:

    • 第二次调用函数时会报错,因为val不是有效的json。设置为 val 之前的字符串
    【解决方案3】:

    您不会直接将值推送到数组中。您必须需要一个数组对象。您的变量值需要转换为数组对象。

    push() 方法将新项目添加到数组的末尾,并返回 新长度。

    var fruits = ["Banana", "Orange", "Apple", "Mango"];
    fruits.push("Kiwi");
    

    http://www.w3schools.com/jsref/jsref_push.asp

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 2015-04-14
      • 2020-09-03
      • 2015-04-09
      • 2014-01-12
      • 2016-08-20
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多