Google App脚本setTimeout函数问题

判断

我有一个典型的Google App Html表单,该表单记录了在电子表格中输入的数据。这是文件。

HTML表单:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">

    <?!= include("css");?>
  </head>
  <body>
    <h2>Feedback Form</h2>
    <div id="message"></div>

  <!--- BUTTON New registration --->
    <br /><input id="button-responder" type ="button" value = "New registration"   
            onclick="submitResponder('button-responder'),
            submitTransition('message');" style="display:none;" />

  <!--- FORM --->   
   <form id="my-form">
    <br /><input id="name" type="text" name="name" placeholder="Your Name">
    <br /><input id="email" type="email" name="email" placeholder="Your Email">
    <br /><textarea id="comment" rows="10" cols="40" name="comment"></textarea>
   <!--- BUTTON submitForm ---> 
    <br /><input id="btn" type="button" value="Submit"
            onclick="submitForm(this.parentNode),
            document.getElementById('my-form').style.display='none',
            submitResponder('button-responder'),submitTransition('message');" />
   </form>
    <?!= include("test-js");?>  
  </body>
</html>

Google脚本:

function doGet(request) {
  return HtmlService.createTemplateFromFile('index')
      .evaluate();//not all caps but it has to match the name of the file and it doesn't - Change to PAGE
}

function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}


function submitData(form) {
  var subject='New Feedback';
  var body=Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s', form.name,form.email,form.comment);

  var folderId = "my-folder-ID"; // Please set the folder ID.  // Added

  var blob = Utilities.newBlob(body, MimeType.HTML, form.name).getAs(MimeType.PDF);  // Added
  var file = DriveApp.getFolderById(folderId).createFile(blob);  // Added

  return Utilities.formatString('name: %s <br />Email: %s<br />Comment: %s<br />
  PDF: <a target="_blank" href="%s">see your PDF file</a>',  
  form.name,form.email,form.comment,file.getUrl());

function userClicked(userInfo){
  var url = "https://docs.google.com/spreadsheets/d/my-spreadsheet-ID";
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Data");
  ws.appendRow([userInfo.name, userInfo.email, userInfo.comment]);
}

测试js

<script>

  function submitForm(form) {
    google.script.run
     .withSuccessHandler(function(value){
       document.getElementById('message').innerHTML = value;
       document.getElementById('name').value = '';
       document.getElementById('email').value = '';
       document.getElementById('comment').value = '';
      }) 
      .submitData(form);
  }

  function submitResponder() {
    var x = document.getElementById("button-responder");
    var xx = document.getElementById("my-form");
    var xxx = document.getElementById("message");
    if (x.style.display === "none") {
      x.style.display = "block";
      xx.style.display = "none";
      xxx.style.display = "block";
    } else {
      x.style.display = "none";
      xx.style.display = "block";
      xxx.style.display = "none";
    }
  }


  function submitTransition() {
    setTimeout(function() {
     document.getElementById('message').style.color = 'blue';}, 2500);
  }


document.getElementById("btn").addEventListener("click",doStuff);
  
  function doStuff(){
    var userInfo = {}
    userInfo.name = document.getElementById("name").value;
    userInfo.email = document.getElementById("email").value;
    userInfo.comment = document.getElementById("comment").value;
  

    google.script.run.userClicked(userInfo);
    document.getElementById("name").value= "";
    document.getElementById("email").value= "";
    document.getElementById("comment").value= "";     
  }

</script>

CSS:

<style>

 #message {
  color: transparent;
 }

</style>

现在在Google脚本文件功能

函数submitData(窗体)

并在test-js文件中

函数doStuff()

他们做得很好,但延迟约为2.5秒,然后Google Script提交了该功能

返回Utilities.formatString

可以显示结果(名称-电子邮件-评论-PDF网址),其结论必须等待2.5秒。

变量中的函数。

在test-js文件中的功能

函数SubmitResponder()

通过变量使链接到ID(消息)的字段可见

name: example-name
email: example-email
comment: example-comment
PDF: see your example-PDF file

和链接到ID(按钮响应者)
“新注册”按钮的字段

然后,在加载index.html页面时,将显示该表单和“提交”按钮,通过单击“提交”来编辑字段,该表单被隐藏,“新注册”按钮将出现,并在大约2.5秒钟后编辑字段(名称-电子邮件....)也会出现。

单击表单下方的“新注册”按钮会重新出现,显然不是在重新加载页面上,而是在

  • 显示=“无”
  • 显示=“块”

现在这是我无法解决的问题:

通过重新编辑字段并再次单击提交表单,先前编辑的字段立即再次出现

name: example-name
email: example-email
comment: example-comment
PDF: see your example-PDF file

大约2.5秒后,它们会使用新编辑的字段进行更新

name: new-name
email: new-email
comment: new-comment
PDF: see your new-PDF file

现在有了功能

function commitTransition(){setTimeout(function(){document.getElementById('message')。style.color ='blue';},2500); }

和风格

#message {颜色:透明;}

我试图找到一种解决方案来延迟(隐藏)旧字段的显示,直到新字段更新为止。

当然,这不是正确的方法。

希望我的解释很清楚,您的帮助将非常有帮助。

提前致谢。

Tanaike
  • 单击“提交”按钮并submitData完成的脚本后,要显示“新注册”的文本和按钮

如果我的理解是正确的,那么该修改如何?

您出现此问题的原因google.script.run是与异步进程一起运行。由此,之前的剧本submitData完成后,document.getElementById('my-form').style.display='none'submitResponder('button-responder')submitTransition('message')正在运行。

修改后的脚本:

请按如下所示修改脚本。

从:

<br /><input id="btn" type="button" value="Submit"
        onclick="submitForm(this.parentNode),
        document.getElementById('my-form').style.display='none',
        submitResponder('button-responder'),submitTransition('message');" />

至:

<br /><input id="btn" type="button" value="Submit" onclick="submitForm(this.parentNode)" />

从:

function submitForm(form) {
  google.script.run
   .withSuccessHandler(function(value){
     document.getElementById('message').innerHTML = value;
     document.getElementById('name').value = '';
     document.getElementById('email').value = '';
     document.getElementById('comment').value = '';
    }) 
    .submitData(form);
}

至:

function submitForm(form) {
  google.script.run
   .withSuccessHandler(function(value){
     document.getElementById('message').innerHTML = value;
     document.getElementById('name').value = '';
     document.getElementById('email').value = '';
     document.getElementById('comment').value = '';

     document.getElementById('my-form').style.display='none';  // Added
     submitResponder('button-responder');  // Added
     submitTransition('message');  // Added
    }) 
    .submitData(form);
}

并且,通过以上修改,您还可以setTimeout按以下步骤删除

从:

function submitTransition() {
  setTimeout(function() {
   document.getElementById('message').style.color = 'blue';}, 2500);
}

至:

function submitTransition() {
  document.getElementById('message').style.color = 'blue';
}

参考

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google App脚本中的webapp javascript函数

来自分类Dev

Google App脚本函数返回空白

来自分类Dev

可以在Google App脚本中使用Google Spreadsheet函数吗?

来自分类Dev

可以在Google App脚本中使用Google Spreadsheet函数吗?

来自分类Dev

Google App脚本条件格式设置问题

来自分类Dev

Google App脚本-通过函数传递多个工作表ID

来自分类Dev

Google Sheets脚本循环问题

来自分类Dev

Google脚本使用replaceText函数

来自分类Dev

分析Google App脚本的性能

来自分类Dev

google app脚本gmail测试

来自分类Dev

从PHP调用Google App脚本?

来自分类Dev

“找不到脚本功能”-Google App脚本

来自分类Dev

GOOGLE APP脚本-LinearOptimizationService-最小绝对增量-问题不可行

来自分类Dev

Google Apps脚本推送到数组问题

来自分类Dev

带有ContentService问题的Google Apps脚本

来自分类Dev

日期比较Google Apps脚本的问题

来自分类Dev

范围不相交的Google脚本保护问题

来自分类Dev

Google Apps脚本中的附件问题

来自分类Dev

带有ContentService问题的Google Apps脚本

来自分类Dev

在 iFrame 中嵌入 Google Apps 脚本的问题

来自分类Dev

Google UiApp中的Google Apps脚本验证问题

来自分类Dev

Google脚本-函数不会基于if语句循环

来自分类Dev

Google App脚本-允许匿名用户访问

来自分类Dev

在Google App脚本中进行Nslookup或dig

来自分类Dev

Google App脚本图表选项

来自分类Dev

Google App脚本缓存服务配额

来自分类Dev

从Google App脚本中的URL抓取表

来自分类Dev

Google App脚本从网站提取数据

来自分类Dev

在Google App脚本中运行的jquery