Получение значения произвольного элемента формы в веб-приложении Google Apps Script - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть веб-приложение Google Apps Script, к которому прикреплена форма, например:

<form id="form">
    <input type="range" min="0" max="3" name="mb1" value="0">
    <input type="range" min="0" max="3" name="mb2" value="0">
    <input type="range" min="0" max="3" name="mb3" value="0">
    etc...
    <input id="submit" type="submit" style="display: none" onclick="this.value='Submitting ...'; google.script.run.withSuccessHandler(formSubmitted) .writeForm(this.parentNode); return false;">
</form>

В файле Code.gs есть функция writeForm (форма), которая может получать доступ к входным значениям формы, таким какИтак:

var mb1 = form.mb1;
var mb2 = form.mb2;
etc...

Однако этот подход неэффективен для многих таких входных данных (у меня около 80).Намного лучше было бы просто получить значения, когда они обрабатываются в цикле, например:

for(var i = 0; i <= 80; i++) {
    var formItemID = "mb"+i;
    console.log(form.formItemID);
}

Однако это, конечно, не работает, так как ищет входные данные формы с идентификатором "formItemID».Я взглянул на некоторые функциональные возможности класса HTMLFormElements, которые следует отправлять, но Apps Script, кажется, не реализует это полностью, и я не могу найти документацию по свойству form.ItemName.Есть ли способ достичь этой функциональности, не вызывая каждый ввод формы отдельно?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Сторона сервера, Ваша форма отправляется как объект с ключом в качестве имени входа и значением в качестве значений ввода.Ваш form будет выглядеть следующим образом:

{
 mb1:0,
 mb2:1,
 mb3:0
}

Чтобы получить доступ к значениям, вы можете использовать form.mb1 как вы использовали или form['mb1'].Чтобы использовать переменные в качестве ключей, всегда используйте скобку [] нотация

for(var i = 0; i <= 80; i++) {
    var formItemID = "mb"+i;
    console.log(form[formItemID]);//Note bracket notation 
}

или без цикла for,

var valuesArr = Object.keys(form).map(function(key){return form[key];})
0 голосов
/ 21 февраля 2019

Вы всегда можете просто пройтись по элементам формы и получить входные значения.Это отправит массив на сервер.

<!DOCTYPE html>
  <html>
    <head>
    <base target="_top">
  </head>
  <body>
    <form id="form" name="form">
      <input class="range" type="range" min="0" max="3" value="0">
      <input class="range" type="range" min="0" max="3" value="0">
      <input class="range" type="range" min="0" max="3" value="0">
      <br>
      <input id="button" type="button" onclick="onClick()">
    </form>
    <script>
      function onClick() {
        var form = document.getElementById("form");
        var vals = [];
        for( var i=0; i<form.elements.length; i++ ) {
          if( form.elements[i].className === "range" ) {
            vals.push(form.elements[i].value);
          }
        }
        google.script.run.getForm(vals);
      }
    </script>
  </body>
</html>
...