96 lines
3.3 KiB
JavaScript
96 lines
3.3 KiB
JavaScript
$(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);
|
|
}
|
|
}
|