为什么在foreach函数中未定义变量?

时间:2018-10-09 14:12:46

标签: javascript jquery

我有一个创建表的jQuery函数:

function propertyView(values) {

// build the table
var frame = '<fieldset id = "propertiesValueArea" style="border: solid 1px #6b6b6b;">';
var content = frame + smallHeader + '<table data-role="table" id="propertiesList"><thead><tr></tr></thead>';

$.each($(values), function () {
    var data1 = this.RealValue.FieldValue;
    var data2 = this.RealValue.Id;
    //create tables row 
    content += '<tr data-id=' + this.Id + '>';
    content += '<td style="vertical-align: inherit;text-align:center;"><label for="">' + this.FieldName + '</label></td>';
    if (this.FieldValue.indexOf(',') > -1) {
        content += '<td style="text-align:center;"><select>';
        this.FieldValue.split(',').forEach(function (item) {

            if (data1 === item) //Here data1 is undefined!!!
            {
                content += '<option selected="selected" value="">' + item + '</option>';
            }
            else {
                content += '<option value="">' + item + '</option>';
            }
        })
        content += '</select></td>';
    }
    else {
        content += '<td style="text-align:center;"><input type="text" id="propFieldName" data-id="' + this.Id + '" value="' + congiValue(this.FieldValue, this.RealValue) + '"/>';
    }
    content += '</tr>';
});
content += '</table>';
content += '</fieldset>'

return content;
}

在每个函数的内部,我创建了2个变量:         var data1 = this.RealValue.FieldValue;         var data2 = this.RealValue.Id;

我尝试在内部各创建一个变量:

 if (data1 === item) //Here data1 is undefined!!!

但是在这一行上,我得到这个错误:

   Uncaught ReferenceError: data1 is not defined

知道为什么data1未定义吗?

3 个答案:

答案 0 :(得分:3)

只能是undefined是因为this.RealValue.FieldValuethis.RealValueundefined

答案 1 :(得分:1)

看起来像

var data1 = this.RealValue.FieldValue; //it's value is undefined
this.FieldValue  //it's value is undefined

尝试

console.log(this.FieldValue)
console.log(data1)

此后,您可以轻松找到错误原因以及原因。否则,您的代码看起来一切正常。

答案 2 :(得分:0)

我以前遇到过类似的问题。我花了几个小时才发现问题。现在除了这里还有一些不清楚的地方。

  1. 该值是否来自另一个函数的操作?如果

    this.RealValue.FieldValue;
    

    来自例如可能是另一个函数的结果,那么在继续执行下一行代码之前,您需要使用async / await来确保该函数完成其操作并且 this.RealValue.FieldValue 中包含数据

  2. 也许 this.RealValue.FieldValue 本身在函数本身之外没有分配任何东西。

为了帮助您,我们需要完整的代码。如果您认为自己的代码过于私密,则可以尝试使用@Negi Rox之前所说的内容。

在代码中的各个关键位置放置console.log(this.RealValue.FieldValue),以确定何时为其分配值。