Как получить значение формы выбора HTML в Google App Script? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть HTML-форма в Google App Script

HTML:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body onload="myFunction()">

    <form id="myForm" >
     <select id="mySelection" name="establishment" style="width:300px">
     </select>
     <br>
     <input type="button" class="button" value="Submit" name="button" onclick="getEstValues()">
    </form>
    <br>

    <script>
     //Redundant success function:\
     function success(msg) {
     };
     //Triggered onload gets parameter as callback function from opOpen.gs updateEstselect().
     function myFunction(array) {
      //Loops through the array of est. 
      for(var i = 0 ;i < array.length; i++){
      //Create an element. 
      var element = document.createElement("option");
      //Insert Test into the element tags created above. 
      var textnode = document.createTextNode(array[i]);
      //Append the text node to the element tags.
      element.appendChild(textnode);
      //appends the <option> to <select> as a child.  
      document.getElementById("mySelection").appendChild(element);
      };
     };


     //Triggers the above function onload then uses the value returned from updateEstSelect as a callback param for myFunction()
     google.script.run
     .withSuccessHandler(myFunction)
     .updateEstSelect();


     function getEstValues(){
     //Gets the form
     var form = document.getElementById("myForm").elements;
     //Creates an object with the form names and values.
     var obj ={};
       for(var i = 0 ; i < form.length ; i++){
       var item = form.item(i);
       obj[item.name] = item.value;
       }
      //Triggers GAS side getEstValues(obj) function. 
      google.script.run
      .withSuccessHandler(function(e) { 
      success(e);
      google.script.host.close();
      })
      .getEstValues(obj);
      //Closes HTML box. 
      google.script.host.close();
     };
    </script>
  </body>
</html>

JS:

function getEstValues(obj){
  Logger.log(obj);
  return obj;
}

HTML-окно отлично загружается при запросе, но когда я проверяю журнал, мне нечего просматривать.Когда я нажимаю на кнопку отправки, onclick="getEstValues()" запускает этот getEstValues(), который затем получает форму с myForm, затем перебирает массив, создает объект, используя name в качестве ключа и value в качестве значения, которое затемзапускает обработчик .getEstValues(obj); с успехом, затем закрывает окно HTML с google.script.host.close();

Проблема:

Он не регистрируется, но когда я нажимаю кнопку отправки, окно HTML закрывается.Журнал:

No logs found. Use Logger API to add logs to your project.

enter image description here

1 Ответ

0 голосов
/ 29 ноября 2018
  • Когда вы нажали кнопку отправки, вы хотите увидеть журнал на Logger.log(obj) из getEstValues(obj).

Если мое понимание верно, как насчет этой модификации?

Точки модификации:

  • Когда в функции есть google.script.host.close() дна getEstValues(), google.script.host.close()'' is run before the work of google.script.run is finished completely. Because google.script.run``работает асинхронной обработкой.
  • Я думал, что google.script.host.close() в нижней части может не потребоваться, потому что google.script.host.close() в withSuccessHandler запускается.

Модифицированный скрипт

Пожалуйста, измените getEstValues() в HTML.

function getEstValues(){
  //Gets the form
  var form = document.getElementById("myForm").elements;
  //Creates an object with the form names and values.
  var obj = {};
  for (var i = 0 ; i < form.length ; i++) {
    var item = form.item(i);
    obj[item.name] = item.value;
  }
  //Triggers GAS side getEstValues(obj) function. 
  google.script.run
  .withSuccessHandler(function(e) {
    success(e);
    google.script.host.close();
  })
  .getEstValues(obj);
  //Closes HTML box.
  // google.script.host.close(); // <----- Modified
}

Если я неправильно понимаю вашу проблему, пожалуйста, сообщите мне.Я хотел бы изменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...