Javascript 在提交之前,Google Web App表单如何检查Google表单中是否已有值?

Javascript 在提交之前,Google Web App表单如何检查Google表单中是否已有值?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在制作一个GoogleWeb应用程序表单,并尝试进行表单验证检查,检查用户输入的代码是否已经在GoogleSheet的第一列中。如果代码不在谷歌表单中,用户只能提交表单。但是我的表格没有检查就一直提交表格。我做错什么了吗?您的回复将不胜感激:) 下面是javascript示例代码: function handleFormSubmit(formObject) { google.script.run.processForm(formObject); if (typeof fo

我正在制作一个GoogleWeb应用程序表单,并尝试进行表单验证检查,检查用户输入的代码是否已经在GoogleSheet的第一列中。如果代码不在谷歌表单中,用户只能提交表单。但是我的表格没有检查就一直提交表格。我做错什么了吗?您的回复将不胜感激:)

下面是javascript示例代码:

  function handleFormSubmit(formObject) {
    google.script.run.processForm(formObject);
    if (typeof formObject === 'string') {
       alert(formObject);
     }else{
       alert("Your form is submitted. Thank you!");
       document.getElementById("myForm").reset();
     }
  }
以下是.gs代码:

function processForm(formObject) {
  var url =  PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(5, 1, ws.getLastRow()-1, 1).getValues();
  
  var codeList = data.map(function(r){return r[0].toString; });
  var position = codeList.indexOf(formObject.code);         //the code that user input is a number
  
  if (position >-1){
    return "You already submit the form.";
  }else{
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
  }
function processForm(formObject) {
  var url = PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(2, 1, ws.getLastRow()-1, 1).getValues();
  var codeList = data.map(function(r){return r[0].toString()});
  var position = codeList.indexOf(formObject.code);
  if (position >-1){
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}
修改后的答案

基于@Tanaike answer,我根据自己的需要做了一些修改:

下面是Javascript代码:

function handleFormSubmit(formObject) {
  google.script.run.withSuccessHandler(e => {
    if (e) {
      alert("The code is already exist.");
    } else {
      alert("Your form is submitted. Thank you!");
      document.getElementById("myForm").reset();
    }
  }).processForm(formObject);
}
以下是.gs代码:

function processForm(formObject) {
  var url =  PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(5, 1, ws.getLastRow()-1, 1).getValues();
  
  var codeList = data.map(function(r){return r[0].toString; });
  var position = codeList.indexOf(formObject.code);         //the code that user input is a number
  
  if (position >-1){
    return "You already submit the form.";
  }else{
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
  }
function processForm(formObject) {
  var url = PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(2, 1, ws.getLastRow()-1, 1).getValues();
  var codeList = data.map(function(r){return r[0].toString()});
  var position = codeList.indexOf(formObject.code);
  if (position >-1){
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}

当我看到您的脚本时,似乎在GoogleApps脚本中使用
if(position>-1){}
检查了该值的存在性。我认为这可以用于你的目标。那么下面的修改呢

修改脚本: Javascript: 谷歌应用程序脚本:
function processForm(formObject) {
  var url =  PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(5, 1, ws.getLastRow()-1, 1).getValues();
  
  var codeList = data.map(function(r){return r[0].toString; });
  var position = npkList.indexOf(formObject.code);         //the code that user input is a number
  
  if (position >-1){
//    return "You already submit the form.";
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}
function processForm(formObject) {
  var url = PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(2, 1, ws.getLastRow()-1, 1).getValues();
  var codeList = data.map(function(r){return r[0].toString()});
  var position = codeList.indexOf(formObject.code);         //the code that user input is a number
  if (position >-1){
//    return "You already submit the form.";
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}
  • 通过以上修改,当
    position>-1
    true
    时,
    true
    返回到Javascript。并运行
    警报(formObject)
    。当
    position>-1
    false
    时,
    false
    返回到Javascript。和
    alert(“您的表单已提交。谢谢!”)
    document.getElementById(“myForm”).reset()都会运行
参考:
补充: 当我看到您的共享电子表格时,“Sheet1”中的数据从第2行开始。但在你的剧本中,是5。这样,就不会检查现有数据。和
r[0]不在方法中运行。所以请添加
()
。当这些内容反映到脚本中时,它将变成如下所示

修改脚本: Javascript: 谷歌应用程序脚本:
function processForm(formObject) {
  var url =  PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(5, 1, ws.getLastRow()-1, 1).getValues();
  
  var codeList = data.map(function(r){return r[0].toString; });
  var position = npkList.indexOf(formObject.code);         //the code that user input is a number
  
  if (position >-1){
//    return "You already submit the form.";
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}
function processForm(formObject) {
  var url = PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(2, 1, ws.getLastRow()-1, 1).getValues();
  var codeList = data.map(function(r){return r[0].toString()});
  var position = codeList.indexOf(formObject.code);         //the code that user input is a number
  if (position >-1){
//    return "You already submit the form.";
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}

当我看到您的脚本时,似乎在GoogleApps脚本中使用
if(position>-1){}
检查了该值的存在性。我认为这可以用于你的目标。那么下面的修改呢

修改脚本: Javascript: 谷歌应用程序脚本:
function processForm(formObject) {
  var url =  PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(5, 1, ws.getLastRow()-1, 1).getValues();
  
  var codeList = data.map(function(r){return r[0].toString; });
  var position = npkList.indexOf(formObject.code);         //the code that user input is a number
  
  if (position >-1){
//    return "You already submit the form.";
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}
function processForm(formObject) {
  var url = PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(2, 1, ws.getLastRow()-1, 1).getValues();
  var codeList = data.map(function(r){return r[0].toString()});
  var position = codeList.indexOf(formObject.code);         //the code that user input is a number
  if (position >-1){
//    return "You already submit the form.";
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}
  • 通过以上修改,当
    position>-1
    true
    时,
    true
    返回到Javascript。并运行
    警报(formObject)
    。当
    position>-1
    false
    时,
    false
    返回到Javascript。和
    alert(“您的表单已提交。谢谢!”)
    document.getElementById(“myForm”).reset()都会运行
参考:
补充: 当我看到您的共享电子表格时,“Sheet1”中的数据从第2行开始。但在你的剧本中,是5。这样,就不会检查现有数据。和
r[0]不在方法中运行。所以请添加
()
。当这些内容反映到脚本中时,它将变成如下所示

修改脚本: Javascript: 谷歌应用程序脚本:
function processForm(formObject) {
  var url =  PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(5, 1, ws.getLastRow()-1, 1).getValues();
  
  var codeList = data.map(function(r){return r[0].toString; });
  var position = npkList.indexOf(formObject.code);         //the code that user input is a number
  
  if (position >-1){
//    return "You already submit the form.";
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}
function processForm(formObject) {
  var url = PropertiesService.getScriptProperties().getProperty('url');
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Sheet1");
  var data = ws.getRange(2, 1, ws.getLastRow()-1, 1).getValues();
  var codeList = data.map(function(r){return r[0].toString()});
  var position = codeList.indexOf(formObject.code);         //the code that user input is a number
  if (position >-1){
//    return "You already submit the form.";
    return true;
  } else {
    ws.appendRow([formObject.code, formObject.name, formObject.things]);
    return false;
  }
}

你好谢谢你的回复。。我已经尝试了解您的修改,但有了该代码,无论是否找到“职位”,都将提交表单。这就是为什么我试图在我的代码中返回警报字符串“You ready submit the form.”,但效果不太好。你认为data.map或indefOf有问题吗?顺便说一下,我只是编辑了我的indexOf,它应该是codeList.indexOf,但仍然没有work@Ray谢谢你的回复。在您的情况下,需要检查电子表格。因此,我建议使用
processForm
函数来处理它。关于
,这就是为什么我试图返回警告字符串“你已经提交了表单。”在我的代码中,但效果不太好哈哈,我无法理解你目前的情况。这是因为我的技术差。对此我深表歉意。为了正确理解它,您能否提供包含当前脚本的示例电子表格,以复制您的问题?谢谢你的好意帮助我:)我希望通过提供的样品能更清楚:啊,我明白了。。我拼错了row和toString(),我修改了你的代码,我已经得到了我想要的!非常感谢你帮助我!你好谢谢你的回复。。我已经尝试了解您的修改,但有了该代码,无论是否找到“职位”,都将提交表单。这就是为什么我试图在我的代码中返回警报字符串“You ready submit the form.”,但效果不太好。你认为data.map或indefOf有问题吗?顺便说一下,我只是编辑了我的indexOf,它应该是codeList.indexOf,但仍然没有work@Ray谢谢你的回复。在您的情况下,需要检查电子表格。因此,我建议使用
processForm
函数来处理它。关于
,这就是为什么我试图返回警告字符串“你已经提交了表单。”在我的代码中,但效果不太好哈哈,我无法理解你目前的情况。这是因为我的技术差。对此我深表歉意。为了正确理解它,您能否提供包含当前脚本的示例电子表格,以复制您的问题?谢谢你的好意帮助我:)我希望通过提供的样品能更清楚:啊,我明白了。。我拼错了row和toString(),我修改了你的代码,我已经得到了我想要的!非常感谢你帮助我!