$(function() { // adding js class for styling with accessibility in mind $('body').addClass('js'); // form field label styling on focus $("form :input").focus(function() { $("label[for='" + this.id + "']").parent().addClass("is-focused"); }).blur(function() { $("label").parent().removeClass("is-focused"); }); $('.status.message.submission-error').addClass("is-hidden"); toggleSubmitButton(true); $('#survey-form').on('submit', function() { /* validate required fields */ var $inputs = $('#survey-form :input'); $('.status.message.submission-error .message-copy').empty(); var cancel_submit = false; $inputs.each(function() { /* see if it is a required field and - if so - make sure user presented all information */ if (typeof $(this).attr("required") !== typeof undefined) { var val = $(this).val(); if (typeof(val) === "string") { if (val.trim().length === 0) { var field_label = $(this).parent().find("label"); $(this).parent().addClass('field-error'); $('.status.message.submission-error .message-copy').append("<li class='error-item'>"+field_label.text()+"</li>"); cancel_submit = true; } } else if (typeof(val) === "object") { /* for SELECT statements */ if (val === null || val.length === 0 || val[0] === "") { var field_label = $(this).parent().find("label"); $(this).parent().addClass('field-error'); $('.status.message.submission-error .message-copy').append("<li class='error-item'>"+field_label.text()+"</li>"); cancel_submit = true; } } } }); if (cancel_submit) { $('.status.message.submission-error'). removeClass("is-hidden"). focus(); $("html, body").animate({ scrollTop: 0 }, "fast"); return false; } toggleSubmitButton(false); }); $('#survey-form').on('ajax:error', function() { toggleSubmitButton(true); }); $('#survey-form').on('ajax:success', function(event, json, xhr) { var url = json.redirect_url; location.href = url; }); $('#survey-form').on('ajax:error', function(event, jqXHR, textStatus) { toggleSubmitButton(true); json = $.parseJSON(jqXHR.responseText); $('.status.message.submission-error').addClass('is-shown').focus(); $('.status.message.submission-error .message-copy'). html(gettext("There has been an error processing your survey.")). stop(). css("display", "block"); }); }); function toggleSubmitButton(enable) { var $submitButton = $('form .form-actions #submit'); if(enable) { $submitButton. removeClass('is-disabled'). attr('aria-disabled', false). removeProp('disabled'); } else { $submitButton. addClass('is-disabled'). attr('aria-disabled', true). prop('disabled', true); } }