我有一个注册表,用于收集用户想要注册活动的日期。使用复选框,用户可以选择多个日期,然后将其添加到formObject
中的数组中。要将值写入Google工作表,我会检查日期数组的长度,然后循环,以便将各个行添加到电子表格中。
我很难强迫class
键总是成为一个数组,即使它是一个单独的类。如果只选择了一个类,则length
属性是字符串的长度,用单个字符写入9或10行数据。
表格
<form id="classSignup" onsubmit="handleFormSubmit(this)">
<label for="first">First Name</label>
<input id="first" name="first" type="text" />
<label for="last">Last Name</label>
<input id="last" name="last" type="text" />
<input type='checkbox' name='class' value='date1'>Date 1</input>
<input type='checkbox' name='class' value='date2'>Date 2</input>
<input type="submit" value="Register" />
</form>
formObject
{last=lastName, first=firstName, class=[dateArray]}
recordData
function recordData(formObject) {
try {
var ss = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
var sheet = ss.getSheetByName("allRegs");
var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow()+1;
var rows = [ ];
// check the formObject structure
Logger.log(formObject);
// Open the class array
for(var i=0; i<formObject.class.length; i++) {
// set the date with the current item
var date = formObject.class[i];
Logger.log(date);
var row = [new Date(), formObject[headers[1]], formObject[headers[2]], formObject[headers[3]], formObject[headers[4]], formObject.class[i]]
rows.push(row);
} // close the rows loop
// write the rows array to the spreadsheet
}
在上面,如果选择date1
和date2
,则返回一个数组,一切正常:
{ first=firstName, last=lastName, class=[date1, date2] }
选择单个日期时,没有数组,只有formObject
中的字符串:
{ first=firstName, last=lastName, class=date1 }
如何强制将所选的任何类推入数组?
答案 0 :(得分:0)
您需要将class
更改为class[]
以强制它进入数组
答案 1 :(得分:0)
在循环外创建一个类数组,然后在循环内推送它。 那么创建你的“行”对象,因为在我看来你给你的表格“行”中有一个“行”。
注意我并不完全理解你的“行”数组,因为表格在这里只是一个表格。
function recordData(formObject) {
try {
var ss = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
var sheet = ss.getSheetByName("allRegs");
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow() + 1;
var rows = [];
var classes = [];
for (var i = 0; i < formObject.class.length; i++) {
classes.push[formObject.class[i]];
}
// set the date with the current item
// was not used... var date = formObject.class[i];
// Logger.log(date);
var row = [new Date(), formObject[headers[1]], formObject[headers[2]], formObject[headers[3]], formObject[headers[4]], classes];
rows.push(row);// seems to be only one?
}
// whatever here.
)