开发者问题收集

Javascript 未捕获的类型错误:无法读取未定义的属性“push”

2018-07-26
263

它显示“未捕获 TypeError:无法读取未定义的属性‘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;
}
3个回答

将 validationInfo 创建为对象而非数组

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

console.log(validationInfo)

在您的循环中,我相信您必须进行类似的更改,例如:

validationInfo[stepId][i].elementId

假设 stepIdstep1step2 之一。当您访问 validationInfo[i] 时,您正在访问 validationInfo 中的键,例如: 0、1、2 等 。这些是您的 step1step2 数组的索引。

Ashish Ranjan
2018-07-26

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

validationInfo.push({ value: { elementId: "txtsearchBar", validateFunc: isEmpty }, index: 'step1'});
Hiren Joshi
2018-07-26

你应该在 head 中写入 define _this = this; ,然后替换 _this 中的所有 this >

ddwuYa
2021-06-29