繁体   English   中英

SIngle值从表单提交到数组

[英]SIngle value into array from form submit

我有一个注册表格,该表格收集用户想要注册某个事件的日期。 使用复选框,用户可以选择多个日期,然后将其添加到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
}

上面,如果选择了date1date2 ,则返回一个数组,并且一切正常。

{ first=firstName, last=lastName, class=[date1, date2] }

当选择一个日期时,没有数组,只有formObject的字符串:

{ first=firstName, last=lastName, class=date1 }

如何强制将选定的任何类推入数组?

您需要将class更改为class[]才能将其强制为数组

在循环外创建一个类数组,然后在循环内将其推入。 然后创建您的“行”对象,因为在您看到的表单中,您看到“行”中有一个“行”。

注意,由于此处的表单是单个表单,因此我无法完全理解您的“行”数组。

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.
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM