【问题标题】:Javascript Uncaught TypeError: Cannot read property 'push' of undefinedJavascript Uncaught TypeError:无法读取未定义的属性“推送”
【发布时间】:2018-07-26 05:08:16
【问题描述】:

它说'未捕获的类型错误:无法读取未定义的属性'push'' 我觉得我没有以正确的方式初始化数组,请帮忙。

var validationInfo = new Array();
var currentStep = 1;
validationInfo["step1"].push({ elementId: "txtsearchBar",       validateFunc: isEmpty });
validationInfo["step2"].push({ elementId: "txtdetails",         validateFunc: isEmpty });  
function isEmpty(element) {
    //alert(element);
    return $(element).val() == undefined || $(element).val() == "";
}
function isCurrentSubmissionValid(stepId) {
    var isOK = true;
    alert(validationInfo);
    for (var i = 0; i < validationInfo[stepId].length; i++) {
        var element = $("#" + validationInfo[i].elementId);
        var validationFunction = validationInfo[i].validateFunc;
        if (!validationFunction(element)) {
            element.addClass("has-error").removeClass("has-success");
            isOK = false;
        } else
        {
            element.addClass("has-success").removeClass("has-error");
        }
    }
    return isOK;
}

【问题讨论】:

  • validationInfo["step1"] 未定义...与另一个类似...您需要将validationInfo创建为对象
  • 如果我在上面将它定义为 var validationInfo = ["step1", "step2"] 那么推送功能会起作用吗?
  • @SmokeyDawson 还是一样的错误..
  • @AshishRanjan 你能举个例子吗?

标签: javascript


【解决方案1】:

将validationInfo创建为对象而不是数组

var validationInfo = {step1: [], step2: [] };
validationInfo['step1'].push("haha");
validationInfo['step2'].push("hehe");

console.log(validationInfo)

在你的循环中,我相信你必须做类似的改变,例如:

validationInfo[stepId][i].elementId

假设stepId 是step1 或step2 之一。如果您访问validationInfo[i],您正在访问validationInfo 中的0, 1 ,2, etc 之类的密钥。这些是您的 step1 或 step2 数组的索引..

【讨论】:

  • 它确实有效,但我想推送对象,它会抛出错误'无法读取未定义的属性'elementId'。'
【解决方案2】:

由于在javascript中使用push方法时无法传递密钥,您可以试试这个。

validationInfo.push({ value: { elementId: "txtsearchBar", validateFunc: isEmpty }, index: 'step1'});

【讨论】:

    【解决方案3】:

    你应该在头部写define _this = this;,然后替换所有this 的_this

    【讨论】:

    • 这个适合vue
    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2017-11-23
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多