使用谷歌应用程序脚本更改列表选项
change list options using google apps script
我想使用html和javascript(谷歌应用程序脚本)的组合将项目列表加载到下拉选择框中。
我已经能够让所有的javascript函数按预期调用并返回值,但当我的代码试图向select对象添加选项时,它似乎失败了。
这是我当前的HTML("索引"):
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
// The code in these functions run when the page is loaded.
google.script.run.withSuccessHandler(addItems).getFolderList();
//This function uses an array of folder names to create options for the select list
function addItems(folders){
alert('addItems was called!');
var htmlSelect = document.getElementById('folder');
for(var z = 0; z < folders.length; z++){
var selectBoxOption = document.createElement('OPTION');
selectBoxOption.value = folders[z];
selectBoxOption.text = folders[z];
htmlSelect.add(selectBoxOption);
}
}
//this function lets the user know if the upload failed or not
function successMess(returnText) {
var div = document.getElementById('output');
div.innerHTML = '<p>'+returnText+'</p>';
}
</script>
</head>
<body>
<form id="myForm">
<p>Please choose a folder to receive the upload</p>
<select name="folder" id="folder">
<option value="Test Value">Test Value</option>
</select>
<br>
<input name="myFile" type="file" id="myFile"/>
<br>
<input type="button" value="Submit"
onclick="google.script.run.withSuccessHandler(successMess).processForm(this.parentNode)" />
</form>
<div id="output"></div>
</body>
</html>
下面是附带的JavaScript(.gs):
function doGet(){
return HtmlService.createHtmlOutputFromFile('index');
}
function processForm(formObject) {
var formBlob = formObject.myFile;
var folderName = formObject.folder;
var returnText = 'Please choose a valid file to upload';
if(formBlob.length > 0){
returnText = 'Your document was uploaded successfully!';
try{
var folder = DriveApp.getFoldersByName(folderName).next();
var driveFile = folder.createFile(formBlob);
}catch(e){
returnText = 'There was an error processing your document';
}
}
return returnText;
}
function getFolderList(){
Logger.log('getFolderList was called');
var ParentFolder = DriveApp.getFoldersByName('Test Folder').next();
var shopFolders = ParentFolder.getFolders();
var folderList = [];
while(shopFolders.hasNext()){
folderList.push(shopFolders.next().getName());
}
folderList.sort();
return folderList;
}
一切都很顺利。。。文件夹列表填充除外。我手动填充了选择选项,只是为了确保processForm功能正常工作。我甚至测试过(使用另一个警报),以确保"getFolderList()"中的文件夹名称数组被忠实地传递(事实确实如此)。获取名为"文件夹"的选定项目或创建新的"选项"项目似乎没有任何问题。当"addItems"尝试将该选项添加到列表中时,它似乎失败了。有人能告诉我我做错了什么,和/或如何解决吗?
谢谢!
以下是您的问题的解决方案:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form id="myForm">
<p>Please choose a folder to receive the upload</p>
<select name="folder" id="fldrList">
<option value="Test Value">Test Value</option>
</select>
<br>
<input name="myFile" type="file" id="myFile"/>
<br>
<input type="button" value="Submit"
onclick="google.script.run.withSuccessHandler(successMess).processForm(this.parentNode)" />
</form>
<div id="output"></div>
</body>
<script type="text/javascript">
// The code in these functions run when the page is loaded.
google.script.run.withSuccessHandler(addItems).getFolderList();
//This function uses an array of folder names to create options for the select list
function addItems(folders){
console.log('addItems was called!' + folders);
var htmlSelect = document.getElementById('fldrList');
console.log('htmlSelect: ' + htmlSelect);
var optionHTML = '';
for(var z = 0; z < folders.length; z++){
console.log('z: ' + z);
console.log('folders[z]: ' + folders[z]);
optionHTML = optionHTML + "<option value='" + folders[z] + "'>" + folders[z] + "</option>";
};
htmlSelect.innerHTML = optionHTML;
}
//this function lets the user know if the upload failed or not
function successMess(returnText) {
var div = document.getElementById('output');
div.innerHTML = '<p>'+returnText+'</p>';
}
</script>
</html>
将选择元素的id名称从folder
更改为fldrList
。
不幸的是,add
方法不起作用。你可以以字符串的形式创建HTML并注入它
请注意,FOR LOOP创建了一个HTML字符串,然后当FOR LOOP完成时,HTML被注入到SELECT元素中。它有效。出于某种原因,Apps Script似乎不允许使用.add
方法。不知道为什么。
相关文章:
- 使用JavaScript在IE9中获取数据列表选项
- 使用Ajax或JavaScript选择下拉列表选项后,在同一页面上执行PHP脚本
- webforms:在javascript中动态添加下拉列表选项
- 为什么数据列表选项的id返回空值
- 动态下拉列表选项在添加多列后未填充
- 通过遍历JSON文件来填充数据列表选项
- 如何在从代码后面显示之前,在弹出窗口中选择预先填充的下拉列表选项
- 删除基于先前下拉列表选择的“选择下拉列表”选项
- 选择文档背景颜色的选择列表选项时,如何更改该颜色
- Jquery调用数据列表选项卡或输入
- Yii-如何获得下拉列表选项值与列表中的文本相同
- 如何创建一组从属选择列表,其中连续列表依赖于前面列表选项的选择
- 动态生成的下拉列表选项的挖空绑定
- 如何将输入映射到我的数据列表选项
- 尝试从 jQuery 帖子结果更新选择列表选项
- 如何阻止用户选择下拉列表选项而不“禁用”它
- 动态添加数据列表选项
- 使用JavaScript / jQuery向价格计算器添加下拉列表选项
- 使用javascript在第一个选择列表选项的基础上更改第二个选择列表
- 用省略号设置下拉列表选项