我试图将页面上所有textareas的值传递给JSON表。 出于某种原因,我得到一个"无法设置未定义错误的值",我不明白,因为我的Json是先前定义的。
以下是具有2个功能的代码。
function parseToJson() {
var json = {};
$("input.invoice_details").each(function () {
json[this.id] = $(this).val();
});
$("select.invoice_details").each(function () {
json[this.id] = $(this).val();
});
json.categories = {};
$("textarea.invoice_categories").each(function () {
if (this.value.trim() !== '') {
json.categories[this.id].values = splitInput(this);
json.categories[this.id].label = this.name;
}
});
console.log(JSON.stringify(json));
generatePreveiw(json);
}
function splitInput(textArea) {
var input = textArea.value.trim();
var lines = input.split("\n");
var array = [];
$.each(lines, function (indexLine, line) {
var columns = line.split("\t");
var obj = {};
$.each(columns, function (indexColumn, column) {
var columnName = columnsName.columnsName[indexColumn].name;
obj[columnName] = column;
});
array.push(obj);
});
return array;
}
答案 0 :(得分:1)
json.categories[this.id].values = splitInput(this);
json.categories[this.id].label = this.name;
应该是:
json.categories[this.id] = {
values: splitInput(this),
label: this.name
};
如果尚未首先创建对象,则无法设置对象的属性。您可以使用此对象文字语法一步创建对象及其属性。
答案 1 :(得分:0)
json.categories = {};
你有一个空对象
json.categories[this.id].values = splitInput(this);
现在,您正尝试从该对象访问名为this.id
的属性。
由于该对象尚未具有任何属性,因此始终为undefined
然后尝试分配undefined.value = splitInput(this)
,这会引发错误。
您需要确保json.categories[this.id]
具有值,然后才能在其上设置属性。
答案 2 :(得分:0)
问题是您正在尝试访问存储在json.categories [this.id]中的对象的属性。 不幸的是它未定义。 请尝试以下方法:
function() {
if (this.value.trim() !== '')
{
//Initialize to an empty object if necessary
json.categories[this.id] = json.categories[this.id] || {};
json.categories[this.id].values = splitInput(this);
json.categories[this.id].label = this.name;
}
});