Несколько полей формы одного входного файла - PullRequest
0 голосов
/ 07 февраля 2019

ЧТО Я ПЫТАЮСЬ ДЕЛАТЬ

Когда нажата кнопка «отправить», я пытаюсь запустить функцию, которая обходит все поля <input type="file"> и отправляетфайлы на Google Диске.Я изменил оригинальный код ЗДЕСЬ .Он работает с одним полем ввода файла, как и ожидалось.

ПРОБЛЕМА

см. Изменения ниже 02/08/19

Я не могу заставить его работать для нескольких <input type="file"> полей.Я попытался создать функцию, которая бы определяла, было ли данное поле пустым.Если это так, пропустите его и переходите к следующему.То, что у меня сейчас не работает.

ДРУГОЕ

Весь экран становится белым при нажатии кнопки.Так или иначе, это работает в оригинальной форме и моих незначительных модификациях, но не сейчас, и я не понимаю, почему или как это исправить.

Обновление: Моя текущая ошибка в консоли показывает "Uncaught TypeError: Невозможно прочитать Uncaught TypeError: Невозможно прочитать свойство 'document' с нулевым значением.

enter image description here

ЧТО Я ПРОБОВАЛ

См. ЗДЕСЬ или ниже.

form.html

   <!doctype html>

<head>
  <style type="text/css">
    body {
      background-color: #FFFFFF;
    }

  </style>

  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>

<body>
  <br>
  <br>
  <br>
  <div align="center">
    <p><img src="ENTER URL"></p>
    <table width="459" border="0">
      <tbody>
        <tr>
          <td width="462">
            <div align="center">
              <hr>
            </div>
            <form id="myForm" align="center">

              <label for="teamName">TEAM</label>
              <select name="teamName" id="teamName" name='teamName'></select>

              <label for="myName">YOUR NAME</label>
              <input type="text" name="myName" placeholder="Your name..">

              <label for="myFile">Passes</label>
              <input type="file" name="myFile" id="passes">
              <label for="myFile">Roster</label>
              <input type="file" name="myFile2" id="roster">
              <input type="submit" value="Upload File" id="clickMe" onclick="clickEvent();">
            </form>
            <div id="output"></div>


            <script>
              google.script.run.withSuccessHandler(buildTeamsList)
                .teams();


              function buildTeamsList(teamsArray) {
                var list = teamsArray;
                //var option = document.createElement('option');
                var option = '';

                for (var i = 0; i < list.length; i++) {
                  option += '<option value="' + list[i] + '">' + list[i] + '</option>';
                }

                $('#teamName').append(option);
                //var select = document.getElementById('teamName');
                //select.appendChild(option);

              }

              function clickEvent() {

                var cE = document.getElementById("clickMe")
                cE.value = 'Uploading...';

                var fileCount1 = document.getElementById("passes").files.length
                console.log(fileCount1);
                var fileCount2 = document.getElementById("roster").files.length
                console.log(fileCount2);
                var x = document.getElementById("clickMe").parentNode;
                //document.getElementById("output").innerHTML =x;

                var y = document.getElementById("clickMe").parentNode;
                //document.getElementById("output").innerHTML =y;

                if (fileCount1 > 0) {
                  google.script.run.withSuccessHandler(fileUploaded)
                    .uploadFiles(x);
                  //.writeToSheet;

                } else if (fileCount2 > 0) {
                  google.script.run.withSuccessHandler(fileUploaded)
                    .uploadFiles2(y);

                } else {
                  return false;
                }


              };


              function fileUploaded(status) {
                document.getElementById('myForm').style.display = 'none';
                document.getElementById('output').innerHTML = status;
              }

            </script>
            <style>
              input {
                display: block;
                margin: 20px;
              }

            </style>
            <hr>
          </td>
        </tr>
      </tbody>
    </table>
    <h3>&nbsp;</h3>
    <p>&nbsp;</p>
  </div>
</body>

Code.gs

`function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('form.html');

}

function teams() {

  var ss = SpreadsheetApp.openById('MYID');
  var sheet = ss.getSheetByName('TEAMS');
  var range = sheet.getRange('A2:A1000');
  var values = range.getValues();

    var array1 = [];

  for (var i = 0; i < values.length; ++i) {

    var column = values[i];
    var colA = column[0];


    if (colA != '') {

      array1.push(colA);
    }
  }

    var teamsArray = [];
  while (array1.length) teamsArray.push(array1.splice(0, 1));
  var lengthDivName2 = teamsArray.length;
  var widthDivName2 = teamsArray[0].length;



  Logger.log(teamsArray);
  return teamsArray;

}

function writeToSheet(form) {
  var ss = SpreadsheetApp.openById('MYID');
  var sheet = ss.getSheetByName('submissions');
  var range = sheet.getRange('A2');

  range.setValue(form.myName);

}

function uploadFiles(form) {

  try {

    var dropbox = "Check In Test";
    var folder, folders = DriveApp.getFoldersByName(dropbox);

    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = DriveApp.createFolder(dropbox);
    }

    var blob = form.myFile; 

    var file = folder.createFile(blob);    
    file.setDescription("Uploaded by " + form.myName);
    file.setName(form.teamName+ " - Passes");

    return "File uploaded successfully " + file.getUrl();

  } catch (error) {

    return error.toString();
  }

}

function uploadFiles2(form) {

  try {

    var dropbox = "Check In Test";
    var folder, folders = DriveApp.getFoldersByName(dropbox);

    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = DriveApp.createFolder(dropbox);
    }

    var blob = form.myFile; 

    var file = folder.createFile(blob);    
    file.setDescription("Uploaded by " + form.myName);
    file.setName(form.teamName + " - Roster");

    return "File uploaded successfully " + file.getUrl();

  } catch (error) {

    return error.toString();
  }

}

ПОБОЧНЫЕ ПРИМЕЧАНИЯ

  1. Если у кого-то естьспособ, которым я могу создать свой список <select> значений (function buildTeamsList(teamsArray)) без JQuery, тогда отлично. Вы можете увидеть строки выше, которые я прокомментировал.
  2. Очевидно, я Франкенштейн.это вместе и не совсем понятно, как все это работает, терпение ценится.
  3. Я также попробовал то, что вы видите ЗДЕСЬ для нескольких файлов из одного поля, но проблема была в том, что яЯ не мог понять, как переименовать файлы в Code.gs, тогда как я мог бы с этим кодом. Потому что я в конечном итоге хочу записать данные в электронную таблицу, зная, как это сделать (как я могу с этимде) важно.

РЕДАКТИРОВАТЬ

  1. Я изменил функцию, включив в нее парантезы, как предложил Танаике.
  2. Я сделал еще несколько копаний, заметив, опять же по предложению Танаике, что есть аргументы, которые нужно передать функции.Первоначально это было (this.parentNode).
  3. Я пробовал, но все равно не работает.
  4. Я попытался выбрать .parentNode кнопки отправки (форма).Моя текущая ошибка в консоли показывает "Uncaught TypeError: Cannot read Uncaught TypeError: Cannot read property 'document' of null.

1 Ответ

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

Для тех, кто может столкнуться с этим.Я смог сделать эту работу, изменив функцию на сервере (code.gs) uploadFiles(form).Теперь одна кнопка и одна функция в форме собираются из обоих входных файлов.

https://jsfiddle.net/nateomardavis/kdpjo4s9/2/

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('form.html');

}

function teams() {

  var ss = SpreadsheetApp.openById('MYID');
  var sheet = ss.getSheetByName('TEAMS');
  var range = sheet.getRange('A2:A1000');
  var values = range.getValues();

  var array1 = [];

  for (var i = 0; i < values.length; ++i) {

    var column = values[i];
    var colA = column[0];


    if (colA != '') {

      array1.push(colA);
    }
  }

  var teamsArray = [];
  while (array1.length) teamsArray.push(array1.splice(0, 1));
  var lengthDivName2 = teamsArray.length;
  var widthDivName2 = teamsArray[0].length;



  Logger.log(teamsArray);
  return teamsArray;

}

function writeToSheet(form) {
  var ss = SpreadsheetApp.openById('MYID');
  var sheet = ss.getSheetByName('submissions');
  var range = sheet.getRange('A2');

  range.setValue(form.myName);

}

function uploadFiles(form) {

  try {

    var dropbox = "Check In Test";
    var folder, folders = DriveApp.getFoldersByName(dropbox);

    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = DriveApp.createFolder(dropbox);
    }

    var blob = form.myFile;

    var file = folder.createFile(blob);
    file.setDescription("Uploaded by " + form.myName);
    file.setName(form.teamName + " - Passes");

    var blob2 = form.myFile2;

    var file2 = folder.createFile(blob2);
    file2.setDescription("Uploaded by " + form.myName);
    file2.setName(form.teamName + " - Roster");

    return "File uploaded successfully " + file.getUrl() + " and " + file2.getUrl();

  } catch (error) {

    return error.toString();
  }

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