javascript - 从 HTML 中获取输入并将其传递给 GS
问题描述
语境
我正在通过 Google 脚本向 Google 电子表格添加不同的功能。我想添加的其中一个功能是弹出一个表单、添加详细信息以及发送一封电子邮件。表单(见下文)是 WIP,字段尚未完全定义。
根据 Alessandro 的反馈更新。
- HTML 中的新表单遵循相同的原则。
- HTML 内的 <Script> 根据反馈更新
- JS 根据反馈更新
还不行。
HTML
<p>To add new tasks for a specific campaign setup, please start specifying what project, campaign, platform and phase you want to add tasks for.</p>
<p>PROJECT</p>
<form id="briefForm" onsubmit="handleFormSubmit(this)">
<div class="container">
<div class="row">
<div class="col-6"><!--left side -->
<div class="form-group row">
<label for="fname" class="col-sm-6 col-form-label">Project:</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="project">
</div>
</div>
<div class="form-group row">
<label for="lname" class="col-sm-6 col-form-label">Platform:</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="platform">
</div>
</div>
</div>
<div class="col-6">
<div class="form-group row">
<label for="campaign" class="col-sm-6 col-form-label">Campaign:</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="campaign">
</div>
</div>
<div class="form-group row">
<label for="lname" class="col-sm-6 col-form-label">Phase:</label>
<div class="col-sm-6">
<div class="row">
<div class="col">
<select name="Month" class="custom-select">
<option value="march">None</option>
<option value="january">Awar.</option>
<option value="february">Cons.</option>
<option value="march">Both</option>
</select>
</div>
</div>
</div>
</div>
</div><!--right side -->
</div><!-- form for teacher/student-->
</div>
<p>TASKS</p>
<div class="container">
<p>Select the relevant tasks to add to this project.</p>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck1">
<label class="custom-control-label" for="customCheck1">Review assets</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck2">
<label class="custom-control-label" for="customCheck2">Send brief</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck3">
<label class="custom-control-label" for="customCheck3">Set up</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck4">
<label class="custom-control-label" for="customCheck4">Quality check</label>
</div>
</div>
<br>
<input type="submit" id="submitbtn" class="btn btn-primary">
</form>
<!-- Script down here -->
<script>
window.closeDia = function() {
var formObject = {
platform: document.getElementById('platform').value,
project: document.getElementById('project').value,
// other form input fields...
}
google.script.run.sendBrief(formObject);
};
</script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
JS(包含 openBrief 和 sendBrief)
function openBrief() {
var s=SpreadsheetApp.getActive();
var htmlDlg = HtmlService.createHtmlOutputFromFile('tasksHTML')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setWidth(750)
.setHeight(450);
SpreadsheetApp.getUi()
.showModalDialog(htmlDlg, 'New tasks for new campaign setup ');
}
function sendBrief(formObject) {
var project = formObject.project;
var platform = formObject.platform;
// and so on...
var s = SpreadsheetApp.getActiveSpreadsheet();
var ss = s.getSheetByName("Support"); // Enter sheet name
var rangeProject = ss.getRange('AA2');
rangeProject.setValue(project)
}
解决方案
注意事项
您正在尝试DOM
在服务器端脚本中引用 。这是不可能的。在这种情况下,您必须将表单值传递给该google.script.run
方法调用的服务器端脚本。
解决方案
我看到您正在click
为提交按钮使用事件处理程序。在这种情况下,您可以更新closeDia
函数并使用表单字段值创建 JSON 对象。
为此,通过它们的 id 选择每个元素并将它们的值放入 JSON 对象中,然后将其传递给服务器端函数。
<script>
window.closeDia = function() {
var formObject = {
email: document.getElementById('email').value,
project: document.getElementById('project').value,
// other form input fields...
}
google.script.run.sendBrief(formObject);
};
</script>
现在您可以轻松地解析传递给服务器端的 JSON,如下所示:
// Server Side: Code.gs
function sendBrief(formObject) {
var project = formObject.project;
var email = formObject.email;
// and so on...
}
参考
推荐阅读
- google-drive-api - Google Drive API - 向服务帐户授予对文件夹中文件的访问权限
- java - 使用另一个 JBoss 服务器上的已验证用户在远程 JBoss 服务器上查找 JNDI
- apache-kafka - 是否可以拥有具有不同操作系统的 Kafka 集群?
- python - 通过 JSON 数组循环到 API
- python - 连接列值直到第二个最后一个有效事务(非零或非空)
- jquery - jQuery我粘贴文本时无法删除div标签
- django - 安装 spyder django 后不工作
- css - 为什么子伪元素设置为显示内联块时父元素有额外的空间?
- swift - 调用中的无关参数标签“at:”
- c# - 使用枚举设置 Navlink Href 属性