Вариант по-умолчанию
Обработчик PHP внизу статьи. Подходит для всех вариантов.
Вариант по-умолчанию — HTML
<div class="feedBackWrapper">
<h3 class="form-h3">Заказать обратный звонок</h3>
<table>
<tbody>
<tr>
<td class="fbw-title">Имя<span style="color:red;">*</span>:</td>
<td><input type="text" placeholder="Имя" class="isrequired fbw-text form-control"></td>
</tr>
<tr>
<td class="fbw-title">Номер телефона<span style="color:red;">*</span>:</td>
<td><input type="text" placeholder="Телефон" class="isrequired fbw-text form-control"></td>
</tr>
<tr>
<td class="fbw-title">E-mail:</td>
<td><input type="text" placeholder="E-mail" class="fbw-text form-control"></td>
</tr>
<tr>
<td class="fbw-title">Цвет:</td>
<td>
<label><input type="checkbox" placeholder="Цвет" title="Синий">Синий</label>
<label><input type="checkbox" placeholder="Цвет" title="Зеленый">Зеленый</label>
<label><input type="checkbox" placeholder="Цвет" title="Красный">Красный</label>
</td>
</tr>
<tr>
<td class="fbw-title">Вкус:</td>
<td>
<label><input type="radio" name='radio1' placeholder="Вкус" title="Сладкий">Сладкий</label>
<label><input type="radio" name='radio1' placeholder="Вкус" title="Соленый">Соленый</label>
<label><input type="radio" name='radio1' placeholder="Вкус" title="Горький">Горький</label>
</td>
</tr>
<tr>
<td class="fbw-title">Комментарий:</td>
<td><textarea placeholder="Комментарий" class="fbw-text form-control"></textarea></td>
</tr>
</tbody>
</table>
<div class="ajax-trigger">
<button class="ajaxgo ajaxgo_insite">Отправить</button>
<div class="successmsg"></div>
</div>
</div>
Вариант по-умолчанию — CSS
.feedBackWrapper {
border: 0;
margin: 0;
padding:0 25px;
}
.feedBackWrapper table {
width:100%;
}
.feedBackWrapper td {
padding: 0;
vertical-align: middle;
}
.feedBackWrapper .fbw-title {
font-size: 16px;
white-space: nowrap;
padding-right: 10px;
width:150px;
}
.feedBackWrapper .form-h3 {
text-align: center;
margin-top: 15px;
}
.feedBackWrapper .ajaxgo {
padding: 5px 40px;
background: #FFC200;
background: -moz-linear-gradient(top, #ffd65e 0%, #ffc200 43%, #fcb400 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffd65e), color-stop(43%,#ffc200), color-stop(100%,#fcb400));
background: -webkit-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: -o-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: -ms-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: linear-gradient(to bottom, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd65e', endColorstr='#fcb400',GradientType=0 );
font-size: 18px;
border-radius: 3px;
cursor:pointer;
outline: none;
border:0;
border-bottom: 3px solid #D3A000;
}
.feedBackWrapper .ajaxgo:focus {
outline:1px dashed #ccc;
}
.feedBackWrapper .ajaxgo:hover {
background: #FFC200;
}
.feedBackWrapper .ajaxgo:active {
border: 0;
margin-top: 3px;
outline:none;
}
.feedBackWrapper .ajaxgo-wr{
height: 38px;
padding-top:25px;
text-align:center;
margin-bottom: 25px;
position: relative;
}
.feedBackWrapper .fbw-text{
margin: 6px 0;
box-sizing: border-box;
padding: 6px;
border: 1px solid #ccc;
outline: none;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
width:100%;
font-family:inherit;
}
.feedBackWrapper .fbw-text:focus {
border-color: #66afe9 !important;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
}
.feedBackWrapper .ajax-trigger {
text-align: center;
padding: 1px;
}
Вариант по-умолчанию — JS
$(document).ready(function(){
$(document.body).on("click", ".ajaxgo .ajaxgo_insite", send);
$(document.body).on("focus", "input", function(){$(this).css("border","");});
function send(){
var wr = $(this).parents(".feedBackWrapper");
var validate = true;
wr.find(".isrequired").each(function(){
if(!$(this).val().length){validate = false; $(this).css("border","1px solid #D22")}
});
if (validate){
var need = {};
need['header'] = "Контактная информация";
need['fields'] = [];
wr.find("input, select, textarea").each(function(){
var fieldElement = {};
//Checkbox, Radio
//Ожидаемая семантика: <input type="checkbox" placeholder="Цвет" title="Синий"> / <input type="radio" name='radio1' placeholder="Вкус" title="Сладкий">
if($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio'){
if($(this).prop('checked') == true){
fieldElement['type'] = $(this).attr("type");
fieldElement['title'] = $(this).attr("placeholder");
fieldElement['value'] = $(this).attr("title");
need['fields'][need['fields'].length] = fieldElement;
}
return true;
}
fieldElement['type'] = $(this).attr("type") || 'text';
fieldElement['title'] = $(this).attr("placeholder");
fieldElement['value'] = $(this).val();
need['fields'][need['fields'].length] = fieldElement;
});
output = JSON.stringify(need);
$.ajax({
type: "POST",
data: {data1: output},
url:'js/mail.php',
dataType:'json',
success: function(data){
wr.find(".ajaxgo.ajaxgo_insite").hide();
wr.find(".successmsg").html(data.result);
wr.find(".successmsg").fadeIn(300).css("display","inline-block");
},
error: function (xhr, ajaxOptions, thrownError){
console.log(xhr.responseText);
}
});
}
}
});
Форма с загрузкой по клику
Обработчик PHP внизу статьи. Подходит для всех вариантов.
<a href="js/mail.php?formtitle=Заказать%20звонок&formsubmit=Жду%20звонка!&mailtitle=Заказать%20звонок&postfix_class=yoyo" class="call_back_form_trigger">Заказать звонок</a>
<script>$('.call_back_form_trigger').fancybox({type: 'ajax'});</script>
Форма с загрузкой файлов
Форма с загрузкой файлов — HTML
<div class="feedBackWrapper">
<h3 class="form-h3">Заказать обратный звонок</h3>
<table>
<tbody>
<tr>
<td class="fbw-title">Имя<span style="color:red;">*</span>:</td>
<td><input type="text" placeholder="Имя" class="isrequired fbw-text form-control"></td>
</tr>
<tr>
<td class="fbw-title">Комментарий:</td>
<td><textarea placeholder="Комментарий" class="fbw-text form-control"></textarea></td>
</tr>
<tr>
<td class="fbw-title">Фото<span style='color:red;'>*</span>:</td>
<td>
<div class="upload_image_fbw_wr">
<div class="inputforupload-description">Описание ожидаемого файла</div>
<input type="file" class="inputforupload isrequired">
<div class="inputforupload-name hidden">Имя файла.jpg</div>
<div class="inputforupload-tip">Форматы: .jpg .jpeg .png; Размер не более 10 Мб</div>
<input type="text" placeholder="Фото 1" class="fbw-text" style="display:none;">
</div>
</td>
</tr>
<tr class="add_foto_fbw_row">
<td></td>
<td><div class="add_foto_fbw">Еще одно фото</div></td>
</tr>
</tbody>
</table>
<div class="ajax-trigger">
<button class="ajaxgo ajaxgo_insite">Отправить</button>
<div class="successmsg"></div>
</div>
</div>
Форма с загрузкой файлов — CSS
.upload_image_fbw_wr {
border: 1px solid #ccc;
padding: 10px;
border-radius: 3px;
margin-bottom: 10px;
}
.inputforupload-tip {
/* padding-top: 5px; */
/* border-top: 1px solid #ccc; */
/* margin-top: 5px; */
display: none;
font-size: 12px;
}
.inputforupload-tip.inputforupload-error {
color: #FB0606;
font-size: 12px;
display: block;
}
.add_foto_fbw {
display: inline;
border-bottom: 1px dashed rgba(0, 0, 0, 0.35);
font-family: "Roboto Condensed";
font-size: 16px;
cursor: pointer;
}
.add_foto_fbw:hover {
border-bottom: 1px solid rgb(8, 144, 222);
box-shadow: 0 1px rgb(8, 144, 222);
}
.inputforupload-description {
padding: 0 0 5px;
}
.feedBackWrapper {
border: 0;
margin: 0;
padding:0 25px;
}
.feedBackWrapper table {
width:100%;
}
.feedBackWrapper td {
padding: 0;
vertical-align: middle;
}
.feedBackWrapper .fbw-title {
font-size: 16px;
white-space: nowrap;
padding-right: 10px;
width:150px;
}
.feedBackWrapper .form-h3 {
text-align: center;
margin-top: 15px;
}
.feedBackWrapper .ajaxgo {
padding: 5px 40px;
background: #FFC200;
background: -moz-linear-gradient(top, #ffd65e 0%, #ffc200 43%, #fcb400 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffd65e), color-stop(43%,#ffc200), color-stop(100%,#fcb400));
background: -webkit-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: -o-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: -ms-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: linear-gradient(to bottom, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd65e', endColorstr='#fcb400',GradientType=0 );
font-size: 18px;
border-radius: 3px;
cursor:pointer;
outline: none;
border:0;
border-bottom: 3px solid #D3A000;
}
.feedBackWrapper .ajaxgo:focus {
outline:1px dashed #ccc;
}
.feedBackWrapper .ajaxgo:hover {
background: #FFC200;
}
.feedBackWrapper .ajaxgo:active {
border: 0;
margin-top: 3px;
outline:none;
}
.feedBackWrapper .ajaxgo-wr{
height: 38px;
padding-top:25px;
text-align:center;
margin-bottom: 25px;
position: relative;
}
.feedBackWrapper .fbw-text{
margin: 6px 0;
box-sizing: border-box;
padding: 6px;
border: 1px solid #ccc;
outline: none;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
width:100%;
font-family:inherit;
}
.feedBackWrapper .fbw-text:focus {
border-color: #66afe9 !important;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
}
.feedBackWrapper .ajax-trigger {
text-align: center;
padding: 1px;
}
Форма с загрузкой файлов — JS
var copyTable = ""+$(".upload_image_fbw_wr").parents("tr").html()+" "; $(".add_foto_fbw").click(function(){ var t = $(this); t.parents(".feedBackWrapper").find(".add_foto_fbw_row").before(copyTable); var itemnum = $(".upload_image_fbw_wr").length; $(".upload_image_fbw_wr").each(function(){ t.parents("tr").find(".fbw-title").html("Фото "+$(this).index()+1 +":"); t.find(".fbw-text").attr("placeholder","Фото "+$(this).index()+1 +":"); }); $(".upload_image_fbw_wr").last().parents("tr").find(".fbw-title").html("Фото "+itemnum+"*:"); $(".upload_image_fbw_wr").last().find(".fbw-text").attr("placeholder","Фото "+itemnum); }); $(document.body).on("change", ".inputforupload", function(){ var t = $(this); if(t[0].files[0] !== undefined){ var re = /(\.jpeg|\.jpg|\.png)$/i; if(re.exec(t[0].files[0].name) && t[0].files[0].size < 10000000){ var data = new FormData(); data.append('file_attach', t[0].files[0]); var fileName = t[0].files[0].name; $.ajax({ url: 'js/mail.php?files', type: 'POST', data: data, cache: false, dataType: 'json', processData: false, contentType: false, beforeSend: function(){ t.siblings(".fa-spinner").removeClass("hidden"); t.siblings(".inputforupload-tip").html("Форматы: .jpg .jpeg .png; Размер не более 10 Мб"); t.siblings(".inputforupload-tip").removeClass("inputforupload-error"); }, success: function(data, textStatus, jqXHR){ console.log(data); if(typeof data.error == 'undefined'){ // Success so call function to process the form t.siblings(".inputforupload-tip").html("Файл загружен успешно!"); t.siblings(".inputforupload-tip").show(); t.siblings(".inputforupload-description").remove(); t.siblings(".inputforupload-tip").removeClass("inputforupload-error"); t.siblings(".fa-spinner").addClass("hidden"); t.addClass("hidden"); t.siblings(".inputforupload-name").html(fileName); t.siblings(".fbw-text").val(data.onlyfilename); t.siblings(".inputforupload-name").removeClass("hidden"); t.siblings(".inputforupload-name").attr("data-filename", data.onlyfilename); t.siblings(".inputforupload-name").addClass("extension-"+data.extension); t.parents(".upload_image_fbw_wr").css("border",""); }else{ // Handle errors here t.siblings(".inputforupload-tip").addClass("inputforupload-error"); t.siblings(".fa-spinner").addClass("hidden"); console.log('ERRORS: ' + data.error); } }, error: function(xhr, textStatus, errorThrown){ // Handle errors here console.log('ERRORS: ' + textStatus); console.log(xhr.responseText); // STOP LOADING SPINNER //t.siblings(".fa-spinner").hide(300); t.siblings(".inputforupload-tip").html("Ошибка:("); t.siblings(".inputforupload-tip").addClass("inputforupload-error"); t.val(""); } }); }else{ //console.log(t[0].files[0].size); t.siblings(".inputforupload-tip").html("Форматы: .jpg .jpeg .png; Размер не более 10 Мб"); t.siblings(".inputforupload-tip").addClass("inputforupload-error"); t.val(""); } } });
Обработчик PHP внизу статьи. Подходит для всех вариантов.
Обработчик PHP для всех вышеописанных вариантов:
<?php
$secret_foldername = "form_upload_files_7y3t789h";
$sitename = $_SERVER['HTTP_HOST'];
// Загрузка фйлов на сервер
if(isset($_GET['files'])){
$data = array();
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < 5; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
$error = false;
$files = array();
$dateForFile = date('Y-m-d-H-i-s');
$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/'.$secret_foldername.'/';
if (!file_exists($uploaddir)) {
if(!mkdir($uploaddir, 0755, true)){
$error = "Ошибка создания папки \"".$uploaddir."\". Код - dir01";
}
}
if(!$error){
foreach($_FILES as $file){
$path_info = pathinfo($file['name']);
$onlyfilename = $dateForFile."-".$randomString."-".basename($file['tmp_name'].".".$path_info['extension']);
$newfilename = $uploaddir.$onlyfilename;
if(move_uploaded_file($file['tmp_name'], $newfilename)){
$files[] = $uploaddir .$file['name'];
}
else{
switch($file['error']){
case 0: $error = "Произошла ошибка. Код - 0"; break;
case 1: $error = "Ошибка. Превышен лимит размера файла. Код - 1"; break;
case 2: $error = "Ошибка. Превышен лимит размера файла. Код - 2"; break;
case 3: $error = "Произошла ошибка при загрузке файла. Код - 3"; break;
case 4: $error = "Произошла ошибка при загрузке файла. Код - 4"; break;
case 5: $error = "Произошла ошибка при загрузке файла. Код - 5"; break;
case 6: $error = "Произошла ошибка при загрузке файла. Код - 6"; break;
case 7: $error = "Произошла ошибка при загрузке файла. Код - 7"; break;
case 8: $error = "Произошла ошибка при загрузке файла. Код - 8"; break;
}
}
}
}
$data = ($error) ? array('error' => $error) : array('files' => $files, 'filename' => $newfilename,'onlyfilename' => $onlyfilename, 'extension' => $path_info['extension']);
echo json_encode($data);
}
// Обработчик запроса AJAX при отправке формы
if($_SERVER['REQUEST_METHOD'] == 'POST' AND !empty($_POST['data1'])){
$key = json_decode($_POST['data1'], true);
if($key){
$message = "<h1>".strip_tags($key['header'])."</h1>\r\n";
$message .= "<table><tbody>";
foreach($key['fields'] as $v){
if(!$v['title']){
continue;
}
if(stristr($v['title'], 'Файл')){
if(!empty($v['value'])){
$message .= "<tr><td><strong>".strip_tags($v['title']).": <strong></td><td><a href='http://".$sitename."/".$secret_foldername."/".strip_tags($v['value'])."'>Скачать файл</a></td></tr>\r\n";
}
}else{
$message .= "<tr><td><strong>".strip_tags($v['title']).":<strong> </td><td>".strip_tags($v['value'])."</td></tr>\r\n";
}
}
$message .= "</tbody></table>";
}else{
$message = "<h1>".strip_tags($key['header'])."</h1>\r\n";
$message .= "<p>На сервере не работает json_decode. Возможно проблема связана с настройкой PHP: MagicQuotes. Необходимо обратиться в техподдержку хостинга.<br>А пока данные в сыром виде:</p>\r\n";
$message .= $_POST['data1'];
}
$to = 'info@'.$sitename; // Укажите свой почтовый ящик
$subject = 'Заявка с сайта '.$sitename;
$subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=utf-8" . "\r\n";
$headers .= "From: Wincub informer <info@".$sitename.">". "\r\n";
if (mail($to, $subject, $message, $headers)){
echo '{"result":"Спасибо! Ваша заявка принята!"}';
}
else{
echo '{"result":"Ошибка.."}';
}
}else{
//Генерация формы:
// ПРИМЕР ВЫЗОВА:
// <a href="js/mail.php?formtitle=Заказать%20звонок&formsubmit=Жду%20звонка!&mailtitle=Заказать%20звонок&postfix_class=yoyo" class="call_back_form_trigger">Заказать звонок</a>
// <script>$('.call_back_form_trigger').fancybox({type: 'ajax'});</script>
// можно отдавать разные варианты формы if($_GET['fbtype'] == 1){}
//Настройки формы:
$formtitle = "Заказать обратный звонок";
$formsubmit = "Отправить";
$mailtitle = "Контактная информация";
$postfix_class = "FBajaxloadedform";
if(!empty($_GET['formtitle'])){$formtitle = strip_tags($_GET['formtitle']);}
if(!empty($_GET['formsubmit'])){$formsubmit = strip_tags($_GET['formsubmit']);}
if(!empty($_GET['mailtitle'])){$mailtitle = strip_tags($_GET['mailtitle']);}
if(!empty($_GET['postfix_class'])){$postfix_class = strip_tags($_GET['postfix_class']);}
?>
<style>
.feedBackWrapper.<?php echo $postfix_class; ?> {
border: 0;
margin: 0;
padding:0 25px;
}
.feedBackWrapper.<?php echo $postfix_class; ?> table {
width:100%;
}
.feedBackWrapper.<?php echo $postfix_class; ?> td {
padding: 0;
vertical-align: middle;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .fbw-title {
font-size: 16px;
white-space: nowrap;
padding-right: 10px;
width:150px;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .form-h3 {
text-align: center;
margin-top: 15px;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo {
padding: 5px 40px;
background: #FFC200;
background: -moz-linear-gradient(top, #ffd65e 0%, #ffc200 43%, #fcb400 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffd65e), color-stop(43%,#ffc200), color-stop(100%,#fcb400));
background: -webkit-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: -o-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: -ms-linear-gradient(top, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: linear-gradient(to bottom, #ffd65e 0%,#ffc200 43%,#fcb400 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd65e', endColorstr='#fcb400',GradientType=0 );
font-size: 18px;
border-radius: 3px;
cursor:pointer;
outline: none;
border:0;
border-bottom: 3px solid #D3A000;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo:focus {
outline:1px dashed #ccc;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo:hover {
background: #FFC200;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo:active {
border: 0;
margin-top: 3px;
outline:none;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo-wr{
height: 38px;
padding-top:25px;
text-align:center;
margin-bottom: 25px;
position: relative;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .fbw-text{
margin: 6px 0;
box-sizing: border-box;
padding: 6px;
border: 1px solid #ccc;
outline: none;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
width:100%;
font-family:inherit;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .fbw-text:focus {
border-color: #66afe9 !important;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajax-trigger {
text-align: center;
padding: 1px;
}
</style>
<div class="feedBackWrapper <?php echo $postfix_class; ?>">
<h3 class="form-h3"><?php echo $formtitle; ?></h3>
<table>
<tbody>
<tr>
<td class="fbw-title">Имя<span style="color:red;">*</span>:</td>
<td><input type="text" placeholder="Имя" class="isrequired fbw-text form-control"></td>
</tr>
<tr>
<td class="fbw-title">Номер телефона<span style="color:red;">*</span>:</td>
<td><input type="text" placeholder="Телефон" class="isrequired fbw-text form-control"></td>
</tr>
<tr>
<td class="fbw-title">E-mail:</td>
<td><input type="text" placeholder="E-mail" class="fbw-text form-control"></td>
</tr>
<?php /*
<tr>
<td class="fbw-title">Цвет:</td>
<td><label><input type="checkbox" placeholder="Цвет" title="Синий">Синий</label><label><input type="checkbox" placeholder="Цвет" title="Зеленый">Зеленый</label><label><input type="checkbox" placeholder="Цвет" title="Красный">Красный</label></td>
</tr>
<tr>
<td class="fbw-title">Вкус:</td>
<td><label><input type="radio" name='radio1' placeholder="Вкус" title="Сладкий">Сладкий</label><label><input type="radio" name='radio1' placeholder="Вкус" title="Соленый">Соленый</label><label><input type="radio" name='radio1' placeholder="Вкус" title="Горький">Горький</label></td>
</tr>
*/ ?>
<tr>
<td class="fbw-title">Комментарий:</td>
<td><textarea placeholder="Комментарий" class="fbw-text form-control"></textarea></td>
</tr>
</tbody>
</table>
<div class="ajax-trigger">
<button class="ajaxgo <?php echo $postfix_class; ?>"><?php echo $formsubmit; ?></button>
<div class="successmsg"></div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
$(document.body).on("click", ".ajaxgo.<?php echo $postfix_class; ?>", send<?php echo $postfix_class; ?>);
$(document.body).on("focus", "input", function(){$(this).css("border","");});
function send<?php echo $postfix_class; ?>(){
var wr = $(this).parents(".feedBackWrapper.<?php echo $postfix_class; ?>");
var validate = true;
wr.find(".isrequired").each(function(){
if(!$(this).val().length){validate = false; $(this).css("border","1px solid #D22")}
});
if (validate){
var need = {};
need['header'] = "<?php echo $mailtitle; ?>";
need['fields'] = [];
wr.find("input, select, textarea").each(function(){
var fieldElement = {};
//Checkbox, Radio
//Ожидаемая семантика: <input type="checkbox" placeholder="Цвет" title="Синий"> / <input type="radio" name='radio1' placeholder="Вкус" title="Сладкий">
if($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio'){
if($(this).prop('checked') == true){
fieldElement['type'] = $(this).attr("type");
fieldElement['title'] = $(this).attr("placeholder");
fieldElement['value'] = $(this).attr("title");
need['fields'][need['fields'].length] = fieldElement;
}
return true;
}
fieldElement['type'] = $(this).attr("type") || 'text';
fieldElement['title'] = $(this).attr("placeholder");
fieldElement['value'] = $(this).val();
need['fields'][need['fields'].length] = fieldElement;
});
output = JSON.stringify(need);
$.ajax({
type: "POST",
data: {data1: output},
url:'<?php echo $_SERVER['PHP_SELF']; ?>',
dataType:'json',
success: function(data){
wr.find(".ajaxgo").hide();
wr.find(".successmsg").html(data.result);
wr.find(".successmsg").fadeIn(300).css("display","inline-block");
},
error: function (xhr, ajaxOptions, thrownError){
console.log(xhr.responseText);
}
});
}
}
});
</script>
<?php
}
?>