The below video shows a few of the enhancements - including
-automatic word counts as you type in paragraph text fields
-email address and tickbox validation to prevent form being submitted unless boxes are ticked
-accordion dropdowns to reduce form size
-working hyperlinks in the text.
While these features are in the front end, in the back, as the fields are all still Google form fields, there is functionality in the collecting Google sheet so that when the form is submitted, Google Apps Scripts run, to provide an edit link, emailing the recipient with confirmation of the data and a link to edit, and a set timer so that the recipient is contacted every x months to review their data and amend if necessary. As normal with Google sheets, an add-on can alert the owners of the sheet when a form is submitted, and Awesome tables can summarise the data and provide searching and filtering.
Some of the code snippets are below:
I included a reference to jquery in the <head> for the accordion and field validation scripts
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
If you have fields set to required in the Google form, if you try to submit the webpage version without completing these fields, then you are taken to the original Google form to complete these. This clearly isn't ideal, so its necessary to make the fields required instead using JavaScript
Sample code here for one of the fields
<script type="text/javascript"> // validate the First Name field $('form').submit(function () { // Get the Login Name value and trim it var name2 = $.trim($('#entry_12345678').val()); // Check if empty of not if (name2 === '') { $('#errorwarning2').text("Required field 'First Name' is empty, please correct and re-submit."); return false; } }); </script>
To do a word count, I used the following script
<script type="text/javascript"> function wordCount( val ){ return { charactersNoSpaces : val.replace(/\s+/g, '').length, characters : val.length, words : val.match(/\S+/g).length, lines : val.split(/\r*\n/).length }; } var $div1 = $('#count1'); $('#entry_987654321').on('input', function(){ var a = wordCount( this.value ); $div1.html( "<br>Word count: "+ a.words ); }); </script>
The Div that shows the word count can then be put next to the relevant field
To stop the form submitting if the email address fields do not match, I used the following:
<script type="text/javascript"> // form id value, default is ss-form var formID = 'ss-form'; var formKey = 'abcdefghijklmnop123456789'; var submitted = false; $(document).ready(function () { var ssForm = $('#' + formID); ssForm.submit(function (evt) { var email = document.getElementById("entry_123456789").value; var confemail = document.getElementById("entry_1011121314").value; if(email == confemail) { ssForm.attr({'action' : 'https://docs.google.com/forms/d/' + formKey + '/formResponse'}); return true; } else { $('#errorwarning').text("Error - email addresses do not match, please correct and re-submit.") return false; } }); }); </script>
If the user has mistyped an email address and has been unable to submit the form, I wanted the error message relating to this to hide as soon as they start typing in the email field again. For this I just used this:
$('#entry_123456789').on('input', function(){ $('#errorwarning1').text(""); });
Away from JavaScript - in the Google Sheet, to let users update their details every x months, I used a variant of the script in my blogpost here
Hope this is of interest, any comments or queries welcomed
How do I use accordion drop-downs in Google forms?
ReplyDeleteHi - I used the code in this article http://tympanus.net/codrops/2012/02/21/accordion-with-css3/
DeleteAs per the blogpost, this is not actually something you can put in a Google form, only use in a web page, bringing in the Google form questions into that page.
This comment has been removed by the author.
ReplyDeleteDo you have information on extracting the form to place it on a web page? When I try using a new form and the steps I can find it doesn't give me some items correctly, such as Multiple Choice or Dropdown Items.
ReplyDeleteHi Karl - I don't think this is going to work for Multiple choice or dropdowns unfortunately
ReplyDelete