首页 > 解决方案 > 将对象推入数组失败

问题描述

creationParams在所有函数之外声明了一个对象。该对象将在整个函数中进行操作。但是,我在将 Object 推送到creationParams具有数据类型的 Property 时遇到问题Array

代码

var creationParams = {};
creationParams.Project = {};
creationParams.Project.Workplaces = [];

$(#foo).click(function() { //this is the function that runs before someid
   //input validations here...

   creationParams.Org = $('#SelectedOrg').val();
   creationParams.Token = '';
});

$('#someid').click(function () {
    $(this).attr('href', '#');

    function isWpExisting(o) {
        for (var cntr = 0; cntr < creationParams.Project.Workplaces; cntr++) {
            if (creationParams.Project.Workplaces[cntr].Name.toUpperCase() === o) {
                return true;
            }
        }
        return false;
    }

    if ($('#wp-name').val() === '') {
        $('#wp-name').addClass("error-field").attr("data-original-title", "Please enter Workplace Name");
        $(this).attr('href', '#');
    }
    else if (isWpExisting($('#wp-name').val().toUpperCase()) === true && !$('#wp-wpcreate').attr('wp-edit')) {
        $('#wp-name').addClass("error-field").attr("data-original-title", "This Workplace is already existing");
        $(this).attr('href', '#');
    }
    else {
        $(this).attr('href', '#divWp-one');
        $('#wp-name').removeClass("error-field").removeAttr("data-original-title");
        var workPlace= {};
        workPlace.Name = $('#wp-name').val();
        workPlace.Description = $('#wp-description').val();

        if ($('#wp-wpcreate').attr('wp-edit')) {

            for (var t = 0; t < creationParams.Project.Workplaces.length; t++) {
                if (creationParams.Project.Workplaces[t].Name === $('#wp-wpcreate').attr('wp-edit')) {
                    creationParams.Project.Workplaces[t] = workPlace;
                    $('#wp-wpcreate').attr('wp-edit', '');
                }
            }
        }
        else {
            creationParams.Project.Workplaces.push(workPlace);
        }
    }
});

//
  ...some more functions here
//

我收到“无法读取未定义的属性‘推送’”的错误。我只想将我的对象推送到数组。我试过制作另一个数组并推入它,它可以工作。

更新:我试过console.log(creationParams.Project.Workplaces);并给了我undefined.

更新 2:我通过移动函数中的完整初始化使其creationParams.Project.Workplaces工作#foo。我想知道为什么,在不同的地方初始化它有什么区别?

问题

  1. 为什么会这样?
  2. 我怎样才能让它工作?已修复(见更新 2

标签: javascriptjqueryarrays

解决方案


推荐阅读