UNPKG

laravel-bootstrap-modal-form

Version:

A form validation extension for your Laravel app. Use when embedding a Bootstrap form into a Bootstrap/jQuery modal.

121 lines (101 loc) 3.98 kB
/*! * Laravel-Bootstrap-Modal-Form (https://github.com/JerseyMilker/Laravel-Bootstrap-Modal-Form) * Copyright 2015 Jesse Leite - MIT License * * Bromance: * Adam Wathan has nice boots. Thank you for BootForms magic. * Matt Higgins has nice beard. Thank you for JS wizardry. */ $('document').ready(function() { // Prepare reset. function resetModalFormErrors() { $('.form-group').removeClass('has-error'); $('.form-group').find('.help-block').remove(); } // Intercept submit. $('form.bootstrap-modal-form').on('submit', function(submission) { submission.preventDefault(); // Set vars. var form = $(this), url = form.attr('action'), submit = form.find('[type=submit]'); // Check for file inputs. if (form.find('[type=file]').length) { // If found, prepare submission via FormData object. var input = form.serializeArray(), data = new FormData(), contentType = false; // Append input to FormData object. $.each(input, function(index, input) { data.append(input.name, input.value); }); // Append files to FormData object. $.each(form.find('[type=file]'), function(index, input) { if (input.files.length == 1) { data.append(input.name, input.files[0]); } else if (input.files.length > 1) { data.append(input.name, input.files); } }); } // If no file input found, do not use FormData object (better browser compatibility). else { var data = form.serialize(), contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; } // Please wait. if (submit.is('button')) { var submitOriginal = submit.html(); submit.html('Please wait...'); } else if (submit.is('input')) { var submitOriginal = submit.val(); submit.val('Please wait...'); } // Request. $.ajax({ type: "POST", url: url, data: data, dataType: 'json', cache: false, contentType: contentType, processData: false // Response. }).always(function(response, status) { // Reset errors. resetModalFormErrors(); // Check for errors. if (response.status == 422) { var errors = $.parseJSON(response.responseText); // Iterate through errors object. $.each(errors, function(field, message) { console.error(field+': '+message); //handle arrays if(field.indexOf('.') != -1) { field = field.replace('.', '['); //handle multi dimensional array for (i = 1; i <= (field.match(/./g) || []).length; i++) { field = field.replace('.', ']['); } field = field + "]"; } var formGroup = $('[name='+field+']', form).closest('.form-group'); formGroup.addClass('has-error').append('<p class="help-block">'+message+'</p>'); }); // Reset submit. if (submit.is('button')) { submit.html(submitOriginal); } else if (submit.is('input')) { submit.val(submitOriginal); } // If successful, reload. } else { location.reload(); } }); }); // Reset errors when opening modal. $('.bootstrap-modal-form-open').click(function() { resetModalFormErrors(); }); });