Скрипты конфликтуют - PullRequest
       1

Скрипты конфликтуют

1 голос
/ 23 октября 2019

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

code.gs

function doGet()
{
  var html=HtmlService.createTemplateFromFile('index');
  return html.evaluate();
}

function getSelect() {
  var list = SpreadsheetApp.openById('spreadssheetID').getSheetByName("VL Slots").getDataRange().getValues();
  var lane = 1;
  var select="";
  for (var l = 3; l < list.length; l++) {
    select+='<option value="' + list[l][lane] + '">'+ list[l][lane] + ' </option>';
  }
  return select;
}
function getTable(lob) {
  var data = SpreadsheetApp.openById('spreadssheetID').getSheetByName("VL Request").getDataRange().getValues();
  var rid = 0;
  var request = 1;
  var table="";
  table+='<tr>';
  for (var i = 1; i < data.length; i++) { 
    if (data[i][rid] == lob) {
      table+='<td>' + data[i][request] + '</td>';
    }
  }
  table+='</tr>';
  return  table;
}

index.html

<!DOCTYPE html>
    <html>
      <head>
        <base target="_top">
      </head>
      <script>
      function populateSelect(){
        google.script.run.withSuccessHandler(onSuccess).getSelect();
       }
      function onSuccess(select){
        document.getElementById("mySelect").innerHTML=select;
      }
      function polling(){
        setInterval(myFunction,2000);
       }
      function myFunction(){
        var lob = document.getElementById("mySelect").value;
        google.script.run.withSuccessHandler(onSuccess2).getTable(lob);    

      }
      function onSuccess2(table){
        document.getElementById("myTable").innerHTML=table;
      }
      </script>
      <body onload="populateSelect()">
        <select id="mySelect" onchange="polling()">
        </select>
        <table id="myTable">
        </table>
<form id="logForm">
<label>Request <span class="required">*</span></label><input type="text" id="request" name="request" class="field-long" placeholder="Request" readonly /> 
</form>

<script>

                var table = document.getElementById('myTable');

                for(var i = 1; i < table.rows.length; i++)
                {
                    table.rows[i].onclick = function()
                    {
                         //rIndex = this.rowIndex;
             document.getElementById("request").value = this.cells[0].innerHTML.trim();

                    };
                }

         </script>

      </body>
    </html>

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

1 Ответ

0 голосов
/ 23 октября 2019
  • Если я правильно понял, ваша цель состоит в том, чтобы щелкнуть по значению, полученному из электронной таблицы, путем опроса и установить это значение как содержимое поля ввода «запрос».

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

  • Имейте в видучто, поскольку вы извлекаете только одно значение из листа, вам не нужно циклически проходить по строке
  • Изменить HTML-часть вашего кода следующим образом:
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <script>
  function populateSelect(){
    google.script.run.withSuccessHandler(onSuccess).getSelect();
   }
  function onSuccess(select){
    document.getElementById("mySelect").innerHTML=select;
  }
  function polling(){
    setInterval(myFunction,2000);
   }
  function myFunction(){
    var lob = document.getElementById("mySelect").value;
    google.script.run.withSuccessHandler(onSuccess2).getTable(lob);        
  }
  function onSuccess2(table){
    document.getElementById("myTable").innerHTML=table;
    var myTable = document.getElementById('myTable');
    var row = myTable.getElementsByTagName("tr")[0];
    var cell = row.getElementsByTagName("td")[0];
    var request= cell.innerHTML;
    row.onclick = createClickHandler(request); 
  }  
  var createClickHandler = function(request) {
    return function(){
      document.getElementById("request").value = request;
    };      
  }        
  </script>
  <body onload="populateSelect()">
    <select id="mySelect" onchange="polling()">
    </select>
    <table id="myTable">
    </table>    
    <form id="logForm">
      <label>Request <span class="required">*</span></label><input type="text" id="request" name="request" class="field-long" placeholder="Request" readonly  /> 
    </form>       
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...