137 lines
5.2 KiB
JavaScript
137 lines
5.2 KiB
JavaScript
/**
|
|
* PC Form Builder Public Scripts
|
|
*
|
|
* Frontend JavaScript functionality for form handling.
|
|
*
|
|
* @package PCFormBuilder
|
|
*/
|
|
|
|
(function($) {
|
|
'use strict';
|
|
|
|
var PCFB_Public = {
|
|
init: function() {
|
|
this.initForms();
|
|
},
|
|
|
|
initForms: function() {
|
|
var self = this;
|
|
|
|
$(document).on('submit', '.pcfb-form', function(e) {
|
|
e.preventDefault();
|
|
self.handleFormSubmit($(this));
|
|
});
|
|
},
|
|
|
|
handleFormSubmit: function($form) {
|
|
var self = this;
|
|
var formId = $form.data('form-id');
|
|
var $submitButton = $form.find('.pcfb-submit-button');
|
|
var $submitText = $form.find('.pcfb-submit-text');
|
|
var $submitLoader = $form.find('.pcfb-submit-loader');
|
|
var $successMessage = $form.closest('.pcfb-form-container').find('.pcfb-success-message');
|
|
var $errorMessage = $form.closest('.pcfb-form-container').find('.pcfb-error-message');
|
|
|
|
$form.find('.pcfb-form-group').removeClass('error');
|
|
$form.find('.pcfb-field-error').text('');
|
|
$errorMessage.hide().find('.pcfb-message-text').text('');
|
|
$successMessage.hide();
|
|
|
|
var formData = $form.serialize();
|
|
var ajaxData = {
|
|
action: 'pcfb_submit_form',
|
|
form_id: formId,
|
|
form_data: {},
|
|
nonce: pcfbVars.nonce
|
|
};
|
|
|
|
$form.find('input, textarea, select').each(function() {
|
|
var $field = $(this);
|
|
var name = $field.attr('name');
|
|
if (name && name !== 'action' && name !== 'form_id' && name !== 'pcfb_nonce') {
|
|
if ($field.is(':checkbox')) {
|
|
if ($field.is(':checked')) {
|
|
if (!ajaxData.form_data[name]) {
|
|
ajaxData.form_data[name] = [];
|
|
}
|
|
ajaxData.form_data[name].push($field.val());
|
|
}
|
|
} else if ($field.is(':radio')) {
|
|
if ($field.is(':checked')) {
|
|
ajaxData.form_data[name] = $field.val();
|
|
}
|
|
} else {
|
|
ajaxData.form_data[name] = $field.val();
|
|
}
|
|
}
|
|
});
|
|
|
|
$form.addClass('loading');
|
|
$submitButton.prop('disabled', true);
|
|
$submitText.hide();
|
|
$submitLoader.show();
|
|
|
|
$.ajax({
|
|
url: pcfbVars.ajaxurl,
|
|
type: 'POST',
|
|
data: ajaxData,
|
|
dataType: 'json',
|
|
success: function(response) {
|
|
$form.removeClass('loading');
|
|
$submitButton.prop('disabled', false);
|
|
$submitText.show();
|
|
$submitLoader.hide();
|
|
|
|
if (response.success) {
|
|
$successMessage.find('.pcfb-message-text').text(response.data.message || 'Thank you!');
|
|
$successMessage.show();
|
|
$form.hide();
|
|
|
|
if (response.data.response_id) {
|
|
console.log('Response ID:', response.data.response_id);
|
|
}
|
|
} else {
|
|
if (response.data.errors) {
|
|
$.each(response.data.errors, function(fieldName, errorMessage) {
|
|
var $fieldGroup = $form.find('[name="' + fieldName + '"]').closest('.pcfb-form-group');
|
|
if ($fieldGroup.length === 0) {
|
|
$fieldGroup = $form.find('[name^="' + fieldName + '"]').closest('.pcfb-form-group');
|
|
}
|
|
if ($fieldGroup.length > 0) {
|
|
$fieldGroup.addClass('error');
|
|
$fieldGroup.find('.pcfb-field-error').text(errorMessage);
|
|
}
|
|
});
|
|
}
|
|
|
|
var errorText = response.data.message || 'An error occurred. Please try again.';
|
|
$errorMessage.find('.pcfb-message-text').text(errorText);
|
|
$errorMessage.show();
|
|
}
|
|
},
|
|
error: function(xhr, status, error) {
|
|
$form.removeClass('loading');
|
|
$submitButton.prop('disabled', false);
|
|
$submitText.show();
|
|
$submitLoader.hide();
|
|
|
|
var errorText = 'An error occurred. Please try again.';
|
|
if (xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message) {
|
|
errorText = xhr.responseJSON.data.message;
|
|
} else if (xhr.statusText) {
|
|
errorText = xhr.statusText;
|
|
}
|
|
|
|
$errorMessage.find('.pcfb-message-text').text(errorText);
|
|
$errorMessage.show();
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
$(document).ready(function() {
|
|
PCFB_Public.init();
|
|
});
|
|
|
|
})(jQuery);
|