google.script.run无法正常工作:未捕获InvalidArgumentError:由于属性:0中的非法值而失败

Koe*_*lis 2 google-apps-script

我的小型表单处理脚本似乎以某种方式破坏了google.run.script。我这样调用它:

google.script.run.withSuccessHandler(worked).verwerkForm(this.parentNode);
Run Code Online (Sandbox Code Playgroud)

运行脚本时,这是我得到的错误:

未捕获的InvalidArgumentError:由于属性:0中的非法值而失败

以前的版本运行良好,我不知道是什么破坏了代码。Google Apps脚本在涉及错误消息或文档时非常令人讨厌。如果有人可以帮助,那就太好了!

作为参考,我还在这里提交了一个问题:谷歌脚本问题报告

我正在使用的索引文件:

> <?!= include('Stylesheet'); ?> <div class="container">    <h1
> id="PageHeader">World Basketball Coaches Community -
> Inschrijving/Application</h1>    <img
> src="https://drive.google.com/a/apps.howest.be/uc?export=view&id=0B1m3_53fwZc8cmdKYjJvakk3WDA"/>
> <p id="required">* required</p>    <form id="form">
>       <div class="special">
>          <p>Aanhef <span class="required">*</span></p>
>          <label><input type="radio" name="voorvoegsel" value="Mr" checked />Mr</label>
>          <label><input type="radio" name="voorvoegsel" value="Mrs"/>Mrs</label>
>          <label><input type="radio" name="voorvoegsel" value="Miss"/>Miss</label>
>          <span></span>
>       </div>
>       <div>
>          <label for="voornaam">Voornaam /Prénom /First name <span class="required">*</span></label>
>          <input type="text" name="voornaam" id="voornaam" placeholder="Voornaam"/>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="naam">Naam /Nom /Name <span class="required">*</span></label>
>          <input type="text" name="naam" id="naam" placeholder="Naam"/>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="geboortedatum">Geboortedatum/ Date de naissance/ Date of birth <span class="required">*</span></label>
>          <input type="date" name="geboortedatum" id="geboortedatum"/>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="nationaliteit">Nationaliteit / Nationalité / Nationaliteit <span class="required">*</span></label>
>          <input type="text" name="nationaliteit" id="nationaliteit" placeholder="Nationaliteit"/>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="stad">Stad / Ville / City <span class="required">*</span></label>
>          <input type="text" name="stad" id="stad" placeholder="Stad"/>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="land">Land / Pays / Country <span class="required">*</span></label>
>          <input type="text" name="land" id="land" placeholder="Land"/>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="opleiding">Opleiding/ Education <span class="required">*</span></label>
>          <select name="opleiding" id="opleiding" >
>             <option value=" "></option>
>             <option value="secondary school">Secondary school</option>
>             <option value="high school">High school </option>
>             <option value="bachelor">Bachelor</option>
>             <option value="master">Master</option>
>             <option value="university">University</option>
>          </select>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="gsm">Gsm <span class="required">*</span></label>
>          <input type="text" name="gsm" id="gsm" placeholder="+32 000 00 00 00"/>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="email">E-mail <span class="required">*</span></label>
>          <input type="email" name="email" id="email" placeholder="someone@example.com"/>
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label for="passport">Upload passport or ID copy (PDF or JPEG) <span class="required">*</span></label>
>          <input type="file" name="passport" accept="image/jpeg,application/pdf" id="passport">
>          <span class="fout"></span>
>       </div>  
>       <div>
>          <label for="color_passport">Upload color passport size photo (JPEG)<span class="required">*</span></label>
>          <input type="file" name="pic" accept="image/jpeg" id="color_passport">
>          <span class="fout"></span>
>       </div>
>       <div class="permission">
>          <label for="akkoord">
>             Ik geef mijn akkoord om deze gegevens aan FIBA over te maken in het kader van de "World Basketball Coaches Community". 
>             Je donne mon accord pour le transfert de mes données à la FIBA dans le cadre du projet "World Basketball Coaches Community"
> <span class="required">*</span>
>          </label>
>          <section id="checkPermission"><input type="checkbox" value="ja" id="akkoord"/> Ik ben akkoord</section> 
>          <span class="fout"></span>
>       </div>
>       <div>
>          <label></label>
>          <input type="button" value="Submit" onclick="submit()"/>
>       </div>    </form> </div> <div id="result" class='hide'>
>     </div> <?!= include('testJavascript'); ?>
Run Code Online (Sandbox Code Playgroud)

我正在使用的TestJavascript:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function submit() {
      google.script.run.withSuccessHandler(worked).verwerkForm(this.parentNode);
}

function worked() {
   $(".container").remove();
   $("#result").html('<h1>Dank je uw registratie is een succes!</h1>').removeClass('hide');
}
</script>
Run Code Online (Sandbox Code Playgroud)

和CSS:

<style>
body {
   font-family: Verdana,Arial,sans-serif;
   background-image: -webkit-gradient(
      linear,
      left top,
      left bottom,
      color-stop(0.08, #0D2C91),
      color-stop(0.76, #0788B3)
   );
   background-image: -o-linear-gradient(bottom, #0D2C91 8%, #0788B3 76%);
   background-image: -moz-linear-gradient(bottom, #0D2C91 8%, #0788B3 76%);
   background-image: -webkit-linear-gradient(bottom, #0D2C91 8%, #0788B3 76%);
   background-image: -ms-linear-gradient(bottom, #0D2C91 8%, #0788B3 76%);
   background-image: linear-gradient(to bottom, #0D2C91 8%, #0788B3 76%);
}

h1#PageHeader {
   margin-bottom:10px;
}

.container {
   margin: 0 auto;
   width: 80%;
   border-left: 1px solid blue;
   border-right: 1px solid blue;
   background: white;
   padding: 10px 10px;
   text-align:center;
}

.container form{
   display:inline-block;
}

.hide{
   display: none;
}

h1 {
   margin: 0 auto;
   display: block;
}

img {
   width: 20%;
   margin: 0 auto;
   display: block;
}

.required {
   color: #ff4444;
   font-weight: 400;
}

span.fout {
   display:block;
   color : #ff4444;
   margin-left: 36%;
}

input.fout {
   color : #ff4444;
   border: 1px solid red !important;
}

form {
   width:80%;
   text-align:left;
}

form div {
   margin: 10px 0;
   display: block;
}

form div label {
   box-sizing: border-box;
   display: inline-block;
   padding: 5px;
   width: 35%;
   font-weight: 800;
   font-family: Calibri;
}

input, select {
   display: inline-block;
   width: 50%;
}

input[type="text"], input[type="date"], input[type="email"], #opleiding {
   padding: 4px;
   font-size: 14px;
   line-height: 1.42857143;
   color: #555;
   background-color: #fff;
   background-image: none;
   border: 1px solid #ccc;
   border-radius: 4px;
   box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
}

#opleiding {
   width: 50.8%;
}

input[type="text"], input[type="date"], input[type="email"]{
   height: 20px;
}

select{
   height:29px;
}

.special p {
   display: inline-block;
   padding: 5px;
   width: 32%;
   font-weight: 800;
}

.special label {
   width: 10%;
   font-weight: 400;
   display: inline-block;
}

#checkPermission {
   font-family: Calibri;
   font-weight:normal;
   font-size: 16px;
   display: inline-block;
}

.permission label {

}

input[type="checkbox"]{
   width: 20px;
}

input:focus {
   border :1px solid blue;
}

input[type="button"] {
   color: #fff;
   background-color: #428bca;
   border-color: #357ebd;
   display: inline-block;
   padding: 6px 12px;
   margin-bottom: 0;
   font-size: 14px;
   font-weight: 400;
   line-height: 1.42857143;
   text-align: center;
   white-space: nowrap;
   vertical-align: middle;
   cursor: pointer;
   -webkit-user-select: none;
   -moz-user-select: none;
   -ms-user-select: none;
   user-select: none;
   background-image: none;
   border: 1px solid transparent;
   border-radius: 4px;
}

#required {
   color: #ff4444;
}
</style>
Run Code Online (Sandbox Code Playgroud)

VerwerkForm函数:

 function verwerkForm(e){
   //check of alle input correct is
   var statusObject = checkInput(e);
   if(!statusObject.inOrde){
     Logger.log("serversidecheck mislukt"); 
     return false;
//     throw Error("De input is niet correct.  Volgende fouten werden gevonden: " + statusObject.foutboodschappen);
   }

   //sla de files in variabelen op en stel direct ook hun naam correct in
   var fileBlobP = doeSetName(e, e.passport, "_passport");
   var fileBlobPic = doeSetName(e, e.pic, "_passport_in_color");

   //creating files
   var docPass = DocsList.getFolderById(docP).createFile(fileBlobP);
   var docColorPass = DocsList.getFolderById(docPic).createFile(fileBlobPic);

   //maak gegevens om toe te voegen klaar, open dan de spreadsheet en voeg de rij met gegevens toe
   var rijGegevens = [e.voorvoegsel, e.voornaam, e.naam, e.geboorteDatum, e.nationaliteit, e.stad, e.land, e.opleiding, e.gsm, e.email, docPass.getUrl(), docColorPass.getUrl(), new Date()];
   SpreadsheetApp.openById(idSpreadsheet).getActiveSheet().appendRow(rijGegevens);
}
Run Code Online (Sandbox Code Playgroud)

解决方案 该错误原来是因为我忘记了在流程表单方法中包含成功案例的返回语句。最后,简单的“ return ok”就足以缓解问题。

Kri*_*ggs 6

GAS无法传递DIV,您需要发送表单,使用$( "#form" )[0]或重组HTML,以便按钮父级是表单,上面可以有表格,而DIV则没有。