返回

javascript-如何使多个相关下拉输入更有效?

发布时间:2022-06-10 05:33:42 308
# 前端

我设法使用来自https://codewithcurt.com/create-dependent-drop-down-on-google-web-app/的代码制作了依赖下拉列表。我需要在这里的图片中输入相同的问题的多个条目:

它有效,我得到了预期的响应。但似乎触发功能只能使用一次。我的意思是,当我尝试将 GetIslands(this.value) 用于第二行条目时,它不起作用。这是我尝试反复使用 GetIslands(this.value) 时的情况: 在此处输入图像描述

当我为 B 选择一个州时,A 的岛屿下拉列表发生了变化。

所以我不得不多次重复相同的代码块(因此 GetIslands2(this.value) 用于第二个条目)。必须有一种较少冗余的方法来做到这一点。任何人都可以帮忙吗?提前致谢!

HTML 和 JAVASCRIPT

<label>State</label>

      <select id="state1" onchange="GetIslands(this.value)" required></div>

      <option value="" hidden>Select a state</option>

      <? for(var i = 0; i < states.length; i++) { ?>      

      <option value="<?= states[i] ?>" ><?= states[i] ?></option>

      <? } ?></select>

<label>Island</label>

    <select name="island" id="island1" required>

    <option value=""  hidden>Select a marine park</option>

    </select>

<label>State</label>

  <select id="state2" onchange="GetIslands2(this.value)" required></div>

  <option value="" hidden>Select a state</option>

  <? for(var i = 0; i < states.length; i++) { ?>      

  <option value="<?= states[i] ?>" ><?= states[i] ?></option>

  <? } ?></select>

<label>Island</label>

    <select name="island2" id="island2" required>

    <option value=""  hidden>Select a marine park</option>

    </select>

<script>

function GetIslands(state)

  {

  google.script.run.withSuccessHandler(function(ar) 

    {

    console.log(ar);

    island1.length = 0;

    let option = document.createElement("option");

    option.value = "";

    option.text = "Select an island";

    option.hidden = true;

    island1.appendChild(option);

    ar.forEach(function(item, index) 

    {    

      let option = document.createElement("option");

      option.value = item;

      option.text = item;

      island1.appendChild(option);    

    });

    }).getIslands(state);

  };

function GetIslands2(state)

  {

  google.script.run.withSuccessHandler(function(ar) 

    {

    console.log(ar);  

    island2.length = 0;

    let option = document.createElement("option");

    option.value = "";

    option.text = "Select an island";

    option.hidden = true;

    island2.appendChild(option);

    ar.forEach(function(item, index) 

    {    

      let option = document.createElement("option");

      option.value = item;

      option.text = item;

      island2.appendChild(option);    

    });    

    }).getIslands(state);

  };

</script>

应用程序脚本

function getState() { 
  var ss= SpreadsheetApp.getActiveSpreadsheet();
  var siteSheet = ss.getSheetByName("Sites"); 
  var getLastRow = siteSheet.getLastRow();
  var return_array = [];
  for(var i = 2; i <= getLastRow; i++)
  {
      if(return_array.indexOf(siteSheet.getRange(i, 1).getValue()) === -1) {
        return_array.push(siteSheet.getRange(i, 1).getValue());
      }
  }
  return return_array;  
}

function getIslands(state) { 
  var ss= SpreadsheetApp.getActiveSpreadsheet();
  var siteSheet = ss.getSheetByName("Sites"); 
  var getLastRow = siteSheet.getLastRow();
  var return_array = [];
  for(var i = 2; i <= getLastRow; i++)
  {
      if(siteSheet.getRange(i, 1).getValue() === state){
        return_array.push(siteSheet.getRange(i, 2).getValue());
      }
  }
  const unique = (value,index,self) => {return self.indexOf(value) ===index;}
  var Unique_List=return_array.filter(unique); 
  return Unique_List;  
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像