Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要帮助使用Google Apps脚本更新HTML Web应用中的下拉列表吗_Javascript_Html_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 需要帮助使用Google Apps脚本更新HTML Web应用中的下拉列表吗

Javascript 需要帮助使用Google Apps脚本更新HTML Web应用中的下拉列表吗,javascript,html,google-apps-script,google-sheets,Javascript,Html,Google Apps Script,Google Sheets,这是我第一次在这里发帖,所以如果我需要编辑任何内容,请告诉我 我正在开发一个程序,该程序运行google sheets中导入的数据,在HTML web应用程序中显示一行数据,然后用户可以为显示的项目分配一个帐号(在下拉列表中找到),并移动到数据中的下一行。数据中的每个项目都有一个ID号,用户根据该ID号和数据描述在列表中选择适当的帐号分配给数据 问题是,这些账号有数百个,让用户滚动/搜索这些账号以找到正确的账号将非常乏味 好消息是,只有某些帐户可以分配给ID号。我可以有效地对下拉列表进行排序,以

这是我第一次在这里发帖,所以如果我需要编辑任何内容,请告诉我

我正在开发一个程序,该程序运行google sheets中导入的数据,在HTML web应用程序中显示一行数据,然后用户可以为显示的项目分配一个帐号(在下拉列表中找到),并移动到数据中的下一行。数据中的每个项目都有一个ID号,用户根据该ID号和数据描述在列表中选择适当的帐号分配给数据

问题是,这些账号有数百个,让用户滚动/搜索这些账号以找到正确的账号将非常乏味

好消息是,只有某些帐户可以分配给ID号。我可以有效地对下拉列表进行排序,以仅显示可分配给当前ID的帐户,从而使用户的工作更轻松、更快

但是,我不知道如何在项目加载到html页面后更新下拉列表。我可以得到当前的身份证号码和排序通过帐户,我只是不能更新下拉列表

我已经粘贴了code.gs和html/javascript代码。 我没有将所有代码都包含在code.gs文件中,因为其中一些代码与我的问题无关

我正在使用物化CSS

代码G.gs:

var url=“隐藏”;
var ss=SpreadsheetApp.openByUrl(url);
var masterWS=ss.getSheetByName(“主列表”);
var项目=[];
var-Route={};
Route.path=函数(路由、回调){
路由[路由]=回调;
}
函数doGet(e){
路径(“摘要”,摘要页);
路径(“编辑”,编辑页面);
if(路由[e.parameters.v]){
返回路线[e.parameters.v]();
}否则{
返回editPage();
}
}
函数摘要页(){
var tmp=HtmlService.createTemplateFromFile(“摘要”);
var sumList=showSummary();
tmp.summaryList=sumList;
返回tmp.evaluate();
}
函数包括(文件名){
返回HtmlService.createHtmlOutFromFile(文件名).getContent();
}
函数editPage(){
var ss=SpreadsheetApp.openByUrl(url);
var ws=ss.getSheetByName(“GLAccounts”);
//创建下拉列表并填充所有帐户选项
var SSassetList=ws.getRange(2,1,getLastRowSpecial(“A”,“GLAccounts”),1.getValues();
var htmlAssetList=SSassetList.map(函数(r){return'+r[0]+'';}).join('');
var tmp=HtmlService.createTemplateFromFile(“页面”);
tmp.assetList=htmlAssetList;
返回tmp.evaluate();
}
函数calculateTotalEntries(){
//Logger.log(“完成:+Done”);
var lastRow=masterWS.getLastRow();
var totalEntries=0;
var i=最后一行;
while(masterWS.getRange(i,1.getValue()!=“事务日期”){
我--;
totalEntries++;
}
masterWS.getRange(“R1”).setValue(totalEntries);
masterWS.getRange(“R2”).setValue(lastRow);
}
函数userClicked(userInfo){
var r=masterWS.getRange(“P1”).getValue();
var GLAccount=userInfo.act;
var lastRow=masterWS.getRange(“R2”).getValue();
var totalEntries=masterWS.getRange(“R1”).getValue();
if(!(masterWS.getRange(“P3”).getValue()){
//Logger.log(“完成解析.Items长度:“+Items.length”);

如果(r这里有一个JavaScript函数,我经常使用它来更新


欢迎来到SO社区

我相信问题不在应用程序脚本中

使用Materialize Select时,需要重新初始化它

这是我在代码库中找到的函数,它应该可以帮助您:

function fillMaterializeSelect(elSelect, data) {

    elSelect.options.length = 0;

    for (let i = 0; i < data.length; i++) {

      const dataElement = data[i];

      const option = document.createElement("option");
      option.value = dataElement.value;
      option.text = dataElement.text;
      elSelect.add(option);

    }

    M.FormSelect.init(elSelect);

}
函数fillMaterializeSelect(elSelect,数据){
elSelect.options.length=0;
for(设i=0;i
谢谢你的回答。这是有道理的,我假设getData()函数是我在code.gs文件中创建的一个函数,它返回我要放入下拉列表中的所有选项/帐户的数组。它是否也必须返回elementID,或者我可以删除element ID参数?谢谢,它可以返回您想要的任何内容。我这样编写它,因为有时我想使用多个下拉列表-通过这种方式,我可以在一个函数中完成所有操作,这样您就可以将返回对象更改为一个对象而不是数组,然后只需重写更新选择函数OK。我刚刚完成了代码编写,并在下面的部分中编写了:
document.getElementById(“updDrop”).addEventListener(“单击”,updateDropdown);函数updateDropdown(){google.script.run.withSuccessHandler(updateSelect.getData();}函数updateSelect(vA){var select=document.getElementById(“glAcc”);select.options.length=0;vA.unshift(“”);for(var i=1;i
但是当我检查日志时,它没有运行getData函数(返回选项数组)这是我创建的。请不要在注释中发布代码。如果在问题中发布代码,阅读起来会容易得多。对不起,我对堆栈溢出还是新手。我刚刚更新了问题。太好了!这成功了。我只需要重新初始化表单,它就按计划开始工作了。谢谢!
gooogle.script.run
.withSuccessHandler(updateSelect)
.getData();
function fillMaterializeSelect(elSelect, data) {

    elSelect.options.length = 0;

    for (let i = 0; i < data.length; i++) {

      const dataElement = data[i];

      const option = document.createElement("option");
      option.value = dataElement.value;
      option.text = dataElement.text;
      elSelect.add(option);

    }

    M.FormSelect.init(elSelect);

}