Javascript 在提交之前,Google Web App表单如何检查Google表单中是否已有值?
我正在制作一个GoogleWeb应用程序表单,并尝试进行表单验证检查,检查用户输入的代码是否已经在GoogleSheet的第一列中。如果代码不在谷歌表单中,用户只能提交表单。但是我的表格没有检查就一直提交表格。我做错什么了吗?您的回复将不胜感激:) 下面是javascript示例代码: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
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
返回到Javascript。并运行true
。当警报(formObject)
为position>-1
时,false
返回到Javascript。和false
和alert(“您的表单已提交。谢谢!”)
document.getElementById(“myForm”).reset()都会运行
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(),我修改了你的代码,我已经得到了我想要的!非常感谢你帮助我!