Google Apps脚本:访问变量由HTML页面中的<script>标记内的.evaluate()发送

时间:2018-05-26 05:49:24

标签: javascript html google-apps-script

我在Sheet中有两列,A是学院名,B是城市名。我想创建一个表单,其中有两个下拉菜单。首先是城市,第二是大学。然后,如果您在第一个下拉列表中选择城市,则第二个下拉列表应仅显示该城市的大学。

&#xA;&#xA;

我采用的方法是,
&#xA;从工作表中读取数据并为城市创建数组。通过评估将两个变量,城市数组和大学和城市的2D数组传递给HTML

&#xA;&#xA;

&#xD;&#xA;
&#xD;&#xA;
  function showSidebarAddNew(){&#xD;&#xA;&#xD;&#xA; var ss = SpreadsheetApp.getActiveSpreadsheet();&#xD;&#xA; var sheet = ss.getSheetByName('option');&#xD;&#xA; var CollegeList = sheet.getDataRange()。getValues();&#xD;&#xA; var cities = [];&#xD;&#xA; for(var d = 0; d&lt; CollegeList.length; d ++)&#xD;&#xA; {&#的xD;&#XA;如果(cities.indexOf(CollegeList [d] [1])==  -  1){cities.push(CollegeList [d] [1])}&#的xD;&#XA; }&#的xD;&#XA;&#的xD;&#XA; var ui = SpreadsheetApp.getUi();&#xD;&#xA; var template = HtmlService.createTemplateFromFile('form');&#xD;&#xA; &#的xD;&#XA; template.cities =城市;&#的xD;&#XA; template.CollegeList = CollegeList;&#的xD;&#XA; &#的xD;&#XA; ui.showSidebar(template.evaluate()。setTitle('New Form'));&#xD;&#xA;}  
&#xD;&#xA;
&# xD;&#xA;
&#xD;&#xA;

&#xA;&#xA;

直到这里一切正常。&#xA;接下来在HTML表单中,创建两次下降。从City Dropdown调用onChange函数,它将改变大学列表的下拉选项

&#xA;&#xA;

&#xD;&#xA;
&#xD;&#xA;
 &lt; form id =”form1“&gt; &#的xD;&#XA; &#的xD;&#XA; &lt; label for =“city”&gt; City&lt; / label&gt;&#xD;&#xA; &lt; select name =“city”size =“1”id =“city”onchange =“UpdateRange(this.value);”&gt;&#xD;&#xA; &lt;选项隐藏已选中&gt;&lt; / option&gt;&#xD;&#xA; &lt;?for(var c = 0; c&lt; cities.length; c ++){?&gt; &lt; option value =“&lt;?= cities [c]?&gt;”&gt;&lt;?= cities [c]?&gt;&lt; / option&gt; &LT;}&GT;?&#的xD;&#XA; &LT; /选择&GT;&#的xD;&#XA; &#的xD;&#XA; &#的xD;&#XA; &lt; label for =“city”&gt; Colleges&lt; / label&gt;&#xD;&#xA; &lt; select name =“city”size =“1”id =“college”&gt;&#xD;&#xA; &lt;选项隐藏已选中&gt;&lt; / option&gt;&#xD;&#xA; &LT; /选择&GT;&#的xD;&#XA;&#的xD;&#XA; &LT峰; br&GT;&#的xD;&#XA; &lt; input type =“submit”class =“btn btn-primary”value =“Submit”&gt;&#xD;&#xA; &LT; /形式&GT;  
&#的xD;&#XA;
&#的xD;&#XA;
&#的xD;&#XA;

& #xA;&#xA;

现在在onChange函数中,我需要访问名为“CollegeList”的变量,这样我就可以从这个城市过滤大学列表并创建选项,但是我无法访问&lt; Script&gt; 标记内的变量“CollegeList”。

&#xA;&#xA;

&#xD;&#xA;
&#xD;&#xA;
 &lt; script type =“text / javascript”&gt;&#xD;&#xA; &#的xD;&#XA;函数UpdateRange(v)&#xD;&#xA; {&#的xD;&#XA; //清除列表中的所有选项&#xD;&#xA; document.getElementById('college')。options.length = 0; &#的xD;&#XA; //添加默认(空白)选项&#xD;&#xA; var optn = document.createElement(“OPTION”);&#xD;&#xA; optn.text ='';&#xD;&#xA; optn.value ='';&#xD;&#xA; &#的xD;&#XA;的document.getElementById( '大学')options.add(OPTN)&#的xD;&#XA; &#的xD;&#XA; var thisCity = CollegeList.filter(function(dr){return dr [1] == v}&#xD;&#xA;&#xD;&#xA; for(var i = 0; i&lt; thisCity.length; i ++)&#xD;&#xA; {&#xD;&#xA; var optn = document.createElement(“OPTION”);&#xD;&#xA; optn.text = thisCity [i] [0] ;&#xD;&#xA; optn.value = thisCity [i] [0];&#xD;&#xA; document.getElementById('college')。options.add(optn)&#xD;&# XA;}&#的xD;&#XA;}&#的xD;&#XA;&LT; /脚本&GT;  
&#的xD;&#XA;
&#的xD;& #xA;
&#xD;&#xA;

&#xA;&#xA;

当我尝试在不使用变量“CollegeList”的情况下创建随机选项时,会创建该选项,表示创建选项的方式是有效的。只有变量不起作用。请帮助。

&#xA;

1 个答案:

答案 0 :(得分:0)

我认为您忘记使用scriptlet语法<?=CollegeList?>访问CollegeList变量。我通常创建客户端javascript变量,其名称与html顶部的服务器端变量同名,如下所示:

<script>
  var CollegeList = <?=CollegeList?>
  var cities = <?=cities?>
</script>

然后,您可以在其余的javascript中使用citiesCollegeList