【发布时间】:2021-04-07 22:17:05
【问题描述】:
我在第 1 次选择中有大约 50 个数据,在第 2 次选择中有一些数据。这是我的完整代码。 我的问题尤其是第一个选择选项中的第一个项目选择。选择第一个项目时,更新第二个选择选项的速度非常慢。
gs 代码:
function get1st() {
var ss = getSS();
var sheet = ss.getSheetByName('data');
var range = sheet.getRange("A2:A");//or "A2:A" for all data
var vA = range.getValues();
var dataSize = vA.length;
var options = [];
Logger.log("array size="+ dataSize);
for(let i=2;i<range.getLastRow();i++){
if(options.indexOf(val = sheet.getRange(i,1).getValue())===-1){
options.push(val);
}
}
// var dataArray = values.toString().split(",");
// var stringVal = JSON.stringify(dataArray);
// Logger.log(stringVal);
// return JSON.stringify(stringVal); //Modified
Logger.log(options);
return options;
}
function get2nd(first='X60') {
var ss = getSS();
var sheet = ss.getSheetByName('data');
var range = sheet.getRange("A2:A");//or "A2:A" for all data
var vA = range.getValues();
var dataSize = vA.length;
var options = [];
Logger.log("array size="+ dataSize);
for(let i=2;i<range.getLastRow();i++){
if(sheet.getRange(i,1).getValue() === first){
if(options.indexOf(val = sheet.getRange(i,2).getValue())===-1){
options.push(val);
}
}
}
// var dataArray = values.toString().split(",");
// var stringVal = JSON.stringify(dataArray);
// Logger.log(stringVal);
// return JSON.stringify(stringVal); //Modified
Logger.log(options);
return options;
}
HTML 代码:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
async function AddList() {
google.script.run.withSuccessHandler(function(ar)
{
console.log(ar);
List.length = 0;
let option = document.createElement("option");
option.value = "";
option.text = "Select State";
option.selected =true;
List.appendChild(option);
ar.forEach(function(item, index)
{
let option = document.createElement("option");
option.value = item;
option.text = item;
List.appendChild(option);
});
}).get1st();
// google.script.run.withFailureHandler(function(error) {
// alert("This action failed to complete. Error: "+ error);
// }.getCountry();
};
window.onload = function() {
AddList();
}
</script>
</head>
<body>
<form id="form">
<div>
<label for="List">Country<label>
<select id="List" name="List" onclick="SecondSelect(this.value)" required ></select>
</div>
<div>
<label for="list2">State<label>
<select id="list2" name="list2" required></select>
</div>
</form>
<a href="#" id="tButton1">click me</a>
<a href="#" id="tButton2">click me I have a parameter</a>
<script>
// document.addEventListener("DOMContentLoaded", theDomHasLoaded, false);
// window.addEventListener("load", pageFullyLoaded, false);
// function theDomHasLoaded(e) {
// alert("haha DOM content is loaded");
// }
// function pageFullyLoaded(e){
// alert("haha page fully loaded");
// document.getElementbyId("tButton1").onclick = function(){myFunction()};
// document.getElementbyId("tButton2").onclick = function(){sayHi("Hi")};
// function myFunction(){
// alert("my Function is called");
// }
// function sayHi(msg){
// alert(msg);
// }
// }
function SecondSelect(country) {
var country = document.getElementById("List");
google.script.run.withSuccessHandler(function(ar)
{
console.log(ar);
list2.length = 0;
let option = document.createElement("option");
option.value = "";
option.text = "Select State";
option.selected =true;
list2.appendChild(option);
ar.forEach(function(item, index)
{
let option = document.createElement("option");
option.value = item;
option.text = item;
list2.appendChild(option);
});
}).get2nd(country.value);
// google.script.run.withFailureHandler(function(error) {
// alert("This action failed to complete. Error: "+ error);
// }.getCountry();
};
</script>
<!-- <script type="text/javascript" src="cart_Test.js"> </script> -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
</body>
</html>
主要问题是它很慢。虽然点击几下后选项显示正确。
【问题讨论】:
-
您应该避免使用像
"A2:A"这样的范围,因为在 getLastRow() 和 getMaxRows() 之间经常会返回很多尾随空值。getRange(2,1,sheet.getLastRow()-1,1)是更好的方法。
标签: javascript google-apps-script google-sheets