Разрешать отправлять текст из электронной таблицы только в текстовое поле веб-приложения Google

#google-apps-script #google-sheets

#google-apps-script #google-таблицы

Вопрос:

Я ищу способ разрешить вводить имена из электронной таблицы только в веб-приложение Google Script. У меня уже есть функция в приложении, которая называется автозаполнением, которая позволяет пользователю вводить имя, а под вводом появляется выпадающий список, предлагающий возможные значения для текстового поля. Это те же имена, которые я хочу разрешить вводить только в текст и, следовательно, отправлять вместе с формой. Прямо сейчас я уже могу извлекать имена из электронной таблицы, поскольку я делаю это с помощью функции автозаполнения.

Например, если у меня в электронной таблице есть Джек и Джилл, как я могу запретить кому-либо вводить Джона в форму?

Комментарии:

1. Я думаю, что вам следует начать с чтения проверки формы на стороне клиента

2. @pguardiario у меня 80 студентов, так что для выпадающего списка этого было бы много, поэтому мне действительно понравилась функция автозаполнения. Вот что такое функция автозаполнения ссылка

Ответ №1:

Вот как может выглядеть onsubmit:

JS:

 var validOptions = ['John', 'Mary']
var formCallback = function(){
  if(validOptions.indexOf($('input#myInput').val()) === -1){
    alert('Wrong!')
    return false
  }
  return true
}
  

HTML:

 <form onsubmit="formCallback()">
  <input id="myInput">
</form>
  

Ответ №2:

Это позволит вам отправлять только те слова, которые находятся в столбце 1 листа 1.

HTML:

 <!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  </head>
  <body>
    
    <form>
      <input type="text" id="txt"name="text" oninput="checkWord();" />
      <br /><input type="button" id="sub" value="Submit" onClick="saveText(this.parentNode);" disabled />
    </form>
    <script>
      var wA;
      $(function(){
        google.script.run
        .withSuccessHandler(function(obj){
          wA=obj;
        })
        .getWords();
      });
       function checkWord() {
         $('#sub').attr("disabled",true);
         var word=$('#txt').val();
         //console.log(wA);
         if(wA.indexOf(word)!=-1) {
           $('#sub').attr('disabled',false);
         }
       }
       function saveText(obj) {
         google.script.run.saveWord(obj);
       }
    </script>
  </body>
</html>
  

gs:

 function getWords() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Sheet1');//Sheet1
  const rg=sh.getRange(1,1,sh.getLastRow(),1);//column1
  const vs=rg.getValues().map(function(r){return r[0];});
  return vs;
}

function saveWord(obj) {
  SpreadsheetApp.getActive().toast(obj.text);
}
//Using a dialog instead of a webapp
function showMyDialog() {
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutputFromFile('ah1'), 'Submit Dialog');
}