2013-06-13 3 views
2

J'ai créé un formulaire dans les scripts Google en utilisant une page html, qui appelle ensuite une fonction javascript, as documented here. Lorsque je lance l'application, le formulaire se charge très bien, mais il n'exécutera pas le script. Comment puis-je faire ce travail?Google Form script & HTML n'exécutera pas le script appelé

Voici un exemple de ce que je suis en train de faire:

<html> 
    <!--Create Sign Out Form--> 
    <form id="signOut"> 

    <div> 
     Destination: 
     <select name="destination"> 
     <option value="lunch">Lunch</option> 
     <option value="meeting">Client Meeting</option> 
     <option value="vacation">Vacation</option> 
     <option value="sick">Out Sick</option> 
     <option value="personal">Personal</option> 
     <option value="home">Working from Home</option> 
     <option value="scedule">Reduced Schedule</option> 
     </select> 
    </div> 

    <div> 
     Supervisor: 
     <select name="supervisor" onselect="google.script.run.withUserObject(this.parentNode).populate(destination)"></select> 
    </div> 

    <div> 
     Start Date: 
     <input type="date" name="startDate" onselect="google.script.run.withUserObject(this.parentNode).SignOutLibrary.dateSelect()"/> 
    </div> 

    <div> 
     End Date: 
     <input type="date" name="endDate" onselect="google.script.run.withUserObject(this.parentNode).SignOutLibrary.dateSelect()"/> 
    </div> 

    <div> 
     Details: 
     <textarea type="text" name="details" style="width: 150px; height: 75px;"></textarea> 
    </div> 

    <div> 
     <input type="button" value="Submit" 
     onclick="google.script.run 
      .sendRequest(this.parentNode)"/> 
    </div> 
    </form> 
</html> 

Et les scripts, il devrait appeler:

function doGet() { 
    // Uses html form 
    return HtmlService.createHtmlOutputFromFile('request_form'); 
} 

SignOutLibrary:

function dateSelect() { 
    var app = UiApp.createApplication(); 
    var handler = app.createServerHandler("change"); 
    var date = app.createDatePicker().setPixelSize(150, 150).addValueChangeHandler(handler).setId("date"); 
    app.add(date); 
    return app; 
} 

function change(eventInfo) { 
    var app = UiApp.getActiveApplication(); 
    app.add(eventInfo.parameter.date); 
    return app; 
} 
+0

des erreurs dans la console? – Prisoner

+0

pas que je suis encore rencontré. (En supposant que vous parlez de l'enregistreur puisqu'il n'y a pas de console: /) – bolensmichael

+0

Je vois dans la documentation qu'il y a un _onclick_, est-ce que quelqu'un sait si _onselect_ est supporté? – bolensmichael

Répondre

0

essayez de changer tous les this.parentNode dans votre code avec this.form

J'ai rapidement regardé dans les docs et PEUT-ÊTRE ça marchera, désolé mais je ne peux pas tester ma réponse maintenant

+0

Je vais donner un coup de feu, merci pour la pointe – bolensmichael

0

Vous ne montrez pas populate() - j'espère que vous avez une telle fonction. Si vous le faites, votre tâche suivante consistera à trouver un moyen d'obtenir une valeur pour destination que vous passez en paramètre. Dans sa forme actuelle, c'est indéfini. Voir Get selected value in dropdown list using JavaScript?.

Vous ne pouvez pas appeler les fonctions de bibliothèque directement à l'aide du script runner, voir le bit sur Private Functions. Vous auriez besoin d'ajouter des fonctions intermédiaires à votre gs "local" pour interfacer avec les fonctions de la bibliothèque telles que SignOutLibrary.dateSelect().

Cette bibliothèque utilise UiApp, tandis que le reste du code utilise le service Html. Choisissez l'un ou l'autre, car vous ne pouvez pas les mélanger comme ça.