google-apps-script - 下拉列表未显示,Bootstrap 和 Google 应用程序脚本,下拉列表从电子表格中填充
问题描述
我一直在努力使这项工作好几个小时,似乎一切都井井有条,但我无法让它发挥作用
希望,也许有人可以指出我正确的方向,你看到这段代码有什么问题吗?
相关部分是第一个文件的最后一个函数
对于第二个文件,都在表单组件之后
我很绝望 :(
这是我正在使用的代码
代码.gs
function doGet(){
return HtmlService.createHtmlOutputFromFile("Webappboot"); //Name of the HTML file
}
function AddRecord(input1, input2, input3, input4, input5, input6, input7) { //Names of the componentsIDs
var ss= SpreadsheetApp.openById("1JJrWaeiDUC7TKFo3zjG3MHWJ90OnU6N3AiEh-9cXdaE"); //Paste Google Sheet ID
var webAppSheet = ss.getSheetByName("TrainingLogData"); //Paste Data Sheet Name
var lastRow = webAppSheet.getLastRow();
webAppSheet.insertRows(2, 1);//shift all rows down by one from row 2
webAppSheet.getRange(2,1).setValue(lastRow); //Entry ID
webAppSheet.getRange(2,2).setValue(input1); // Date
webAppSheet.getRange(2,3).setFormula('="Wk - " & WEEKNUM(B2) & " - " & YEAR(B2)'); // Week # and Year Formula: ="Wk - " & WEEKNUM(B2) & " - " & YEAR(B2)
webAppSheet.getRange(2,4).setValue(input2); //Exercise
webAppSheet.getRange(2,5).setValue(input3); //Mov.Pattern/Muscle Group
webAppSheet.getRange(2,6).setValue(input4); //Sets
webAppSheet.getRange(2,7).setValue(input5); //Reps
webAppSheet.getRange(2,8).setValue(input6); //RIR
webAppSheet.getRange(2,9).setValue(input7); //Kg
webAppSheet.getRange(2,10).setValue(new Date()); //Timestamp
}
function getDropDownArray (){
var ss2 = SpreadsheetApp.openById("1JJrWaeiDUC7TKFo3zjG3MHWJ90OnU6N3AiEh-9cXdaE"); //Google Sheet ID
var dropdownSheet = ss2.getSheetByName("SupportSheet"); //Sheet with dropdown options
var lastRowdd = dropdownSheet.getLastRow();
return dropdownSheet.getRange(1,2,lastRowdd, 1).getValues();
}
HTML
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
<script>
function AddRow()
{
var input1 = document.getElementById("input1").value;
var input2 = document.getElementById("input2").value;
var input3 = document.getElementById("input3").value;
var input4 = document.getElementById("input4").value;
var input5 = document.getElementById("input5").value;
var input6 = document.getElementById("input6").value;
var input7 = document.getElementById("input7").value;
if(input1 != '' && input2 != '' && input3 != '' && input4 != '' && input5 != '' && input6 != '' && input7 != '')
{
google.script.run.AddRecord(input1, input2, input3, input4, input5, input6, input7);
document.getElementById("input1").value = '';
document.getElementById("input2").value = '';
document.getElementById("input3").value = '';
document.getElementById("input4").value = '';
document.getElementById("input5").value = '';
document.getElementById("input6").value = '';
document.getElementById("input7").value = '';
document.getElementById("display_error").innerHTML = "";
}
else
{
document.getElementById("display_error").innerHTML = "Enter All Information";
}
}
</script>
</head>
<body>
<!-- Login Form -->
<div class="container-fluid">
<div class="row justify-content-center mt-5">
<div class="col-lg-4 col-md-6 col-sm-6">
<div class="card shadow">
<div class="card-title text-center border-bottom">
<h2 class="p-3">Data Entry</h2>
</div>
<div class="card-body">
<form>
<div class="mb-4">
<label for="input1" class="form-label">Input1</label>
<input type="date" class="form-control" id="input1" />
</div>
<div class="mb-4">
<label for="input2" class="form-label">input2</label>
<input type="text" class="form-control" id="input2" />
</div>
<div class="mb-4">
<label for="input3" class="form-label">input3</label>
<select class="form-control" id="input3" >
</select>
</div>
<div class=row>
<div class="col mb-4">
<label for="input4" class="form-label">input4</label>
<input type="number" class="form-control" id="input4" />
</div>
<div class="col mb-4">
<label for="input5" class="form-label">input5</label>
<input type="number" class="form-control" id="input5" />
</div>
</div>
<div class=row>
<div class="col mb-4">
<label for="input6" class="form-label">input6</label>
<input type="text" class="form-control" id="input6" />
</div>
<div class="col mb-4">
<label for="input7" class="form-label">input7</label>
<input type="text" class="form-control" id="input7" />
</div>
</div>
<div class="mb-4">
<input type="button" value="Submit" class="btn btn-primary mr-1" onclick="AddRow()" />
<div id="display_error" style="color: red" ></div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
function afterPageLoads() {
google.script.run.withSuccessHandler(afterDropDownArrayReturned).getDropDownArray();
}
function afterDropDownArrayReturned(arrayOfArrays){
var dditem = document.getElementById("input3");
arrayOfArrays.forEach(function(r){
var option = document.createElement("option");
option.textContent = r[0];
dditem.appendChild(option);
});
}
document.addEventListener("DOMcontentLoaded",afterPageLoads);
</script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js" integrity="sha384-Atwg2Pkwv9vp0ygtn1JAojH0nYbwNJLPhwyoVbhoPwBhjQPR5VtM2+xf0Uwh9KtT" crossorigin="anonymous"></script>
</body>
</html>
解决方案
我以为在你的脚本中,DOMcontentLoaded
是需要修改的。
从:
document.addEventListener("DOMcontentLoaded",afterPageLoads);
到:
document.addEventListener("DOMContentLoaded", afterPageLoads);
- 在本次修改中,
DOMcontentLoaded
修改为DOMContentLoaded
。
笔记:
- 在此修改中,假设 Google Apps Script 端的脚本和其他 Javascript 工作正常。请注意这一点。
参考:
推荐阅读
- javascript - 错误:无法读取未定义的 REACT JS 的属性“地图”
- javascript - 未捕获的 SyntaxError:main.js 中的令牌无效或意外
- flutter - dartdoc 未找到/不工作。飞镖安装坏了?
- python - psutil 工作负载不一致
- mysql - 选项文件的Mysql位置
- google-apps-script - Problems to get only the value of a row within a 2D array Google Apps Script
- azure - 错误:请求的资源需要用户身份验证:在 AzureCLI 任务构建管道中
- java - 读取文件的签名字节以使用公钥验证签名
- java - 没有 java,在 Redhat 7.9 linux 服务器上可用
- ruby-on-rails - 创建路由时如何指定应该使用哪些控制器?