私は、ユーザーがイベントに登録したい日付を収集する登録フォームを持っています。チェックボックスを使用すると、複数の日付を選択して、formObject
の配列に追加することができます。 Googleのシートに値を書き込むには、日付の配列の長さをチェックしてからループを行い、個々の行がスプレッドシートに追加されるようにします。フォームからの配列への値の挿入
にclass
キーを強制的に強制的に詰め込むことは、1つのクラスであっても常にです。クラスが1つしか選択されていない場合、length
プロパティは文字列の長さであり、9行または10行のデータを1文字で記述します。
フォーム
<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
}
、場合とdate2
は、選択されている配列が返され、すべてが通常通り動作します:formObject
に
{ first=firstName, last=lastName, class=[date1, date2] }
は、何の配列、単なる文字列はありません。
{ first=firstName, last=lastName, class=date1 }
どのようにすることができます私は、配列にプッシュされるように選択されたクラスを強制しますか?
「formObject」にはどのようなコードが入りますか?なぜ、 'class'を配列として渡すだけではないのですか(' class = [date1] ')? – billyonecan
'formObject'はGoogle Apps Script関数で構築されています。私は、クラスとしてフォームを配列として返そうとしましたが、配列ではなく文字列として扱われます。 – Brian
あなたの 'for'ループの前に' typeof formObject.class'をテストすることができます。文字列の場合は、文字列 – billyonecan