Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Модуль в интернет-магазине (https://javascript.ru/forum/misc/58648-modul-v-internet-magazine.html)

artem9009 02.10.2015 15:58

Модуль в интернет-магазине
 
Добрый день, дорогие программисты!
Возник вопрос. Модуль представляет из себя скрипт, который отправляет заказ на мейл. Но ошибка в том, что скрипт закрывается при оставленных полях (имя, емейл, телефон, комментарий) пустыми. В общем скрипт работает, только при заполненных ВСЕХ полях. Как эта проблему можно решить?

Спасибо!

Вот пример работы. Кнопка "Купить в 1 клик"
САМ МОДУЛЬ

laimas 02.10.2015 16:04

По умолчанию обязательное поле для заполнения только телефон, но это не сложно исправить отредактировав файл index.xml в архиве с модулем. В нем же можете добавить или изменить перевод да и саму логику работы модуля.

Это из описания, а значит как минимум должна быть возвращена ошибка на не заполненное поле почты. А остальные не обязательны. Если не так, автору скрипта предъявить претензии.

artem9009 02.10.2015 16:51

Автор скрипта красиво слился, в праве вседозволенности )
Написано много что, но в деле не все работает. Поправил основные моменты, но остались те, ради которых и была создана эта тема. Поэтому и задал вопрос здесь, в силу моих незнаний в этой области.

Всплывающее окно закрывает, при нажатии на кнопку "сделать заказ" даже при пустых формах. Ошибка выдается - мол незаполненные поля и т.д ,но окно закрывается.

laimas 02.10.2015 17:09

Цитата:

Сообщение от artem9009
Ошибка выдается - мол незаполненные поля и т.д ,но окно закрывается.

Ну а зачем его постоянно держать? Надо полагать это под Ajax работает - сервер выдал сообщение о результатах проверки и вправе лечь спать. А клиент отобразил сообщение и тоже свою работу сделал. А далее по логике сервер ждет заполненные поля обязательные. Или сообщение и форма это одна панель и форма закрывается?

artem9009 02.10.2015 17:24

Абсолютно верно. Скрипт завершает свою работу, показывая что поля пустые. И еще одно замечание кстати. Скрипт отправляет форму ТОЛЬКО, ЕСЛИ ВСЕ поля заполнены. В противном случае все та же история - окно просто закрывается.

laimas 02.10.2015 17:27

Я спрашивал о форме, ибо скриптов (по принадлежности) два - серверный и клиентский.

artem9009 02.10.2015 17:49

Видимо значит одна. Есть какие-нибудь варианты решения сия проблемы?

laimas 02.10.2015 18:03

Цитата:

Сообщение от artem9009
Видимо значит одна.


Что одна - "срипта"? :) Скриптов не один, но есть серверная, есть клиентская часть. То что отправляет только при заполнении всех полей, это баг серверного скрипта, который отправку почты производит, или конфигурации, что как пишется в индексном файле модуля определяется. То что что-то на клиенте закрывается, до сих пор не понятно закрывается ли при этом форма или нет, то этим занимается клиентский скрипт.

Решение конечно есть, нужно смотреть код и исправлять баги.

artem9009 02.10.2015 18:12

Цитата:

Или сообщение и форма это одна панель и форма закрывается?
Я за этим и пришел к Вам нам форум, уважаемые сенсеи JavaScriptного дела ) Нужна ваша рука в решении этого вопроса

laimas 02.10.2015 18:39

JavaScript не занимается отправкой почты. Вот по поводу кода приема сообщений, отправки формы, это да, но так вы код то покажите, или кто-то тут экстрасекс? :)

А проблемы с отправкой почты непосредственно, это уже серверный код смотреть надо.

artem9009 02.10.2015 19:05

Проблем с отправкой нет уже. Проблема с закрыванием окна)

У нас два файла:
jqBootstrapValidation и jquery.maskedinput

<script type="text/javascript">
				jQuery(function($){
				   $("#phone").mask("+7 (999) 999-9999");
				});
				</script>
				
				<script type="text/javascript"><!--
					/*
					  Jquery Validation using jqBootstrapValidation
					   example is taken from jqBootstrapValidation docs 
					  */
					$(function() {

					 $("input,textarea").jqBootstrapValidation(
						{
						 preventSubmit: false,
						 submitError: function($form, event, errors) {
						  <!--  something to have when submit produces an error ?
						  <!--  Not decided if I need it yet
						 },
						 submitSuccess: function($form, event) {
						  event.preventDefault(); <!--  prevent default submit behaviour
						   <!--  get values from FORM
						   var foproduct = $("input#foproduct").val();  
						   var foprice = $("input#foprice").val();  
						   var fomodel = $("input#fomodel").val();
						   var fostock = $("input#fostock").val();
						   var name = $("input#name").val();   
						   var emailcustomer = $("input#emailcustomer").val();
						   var phone = $("input#phone").val(); 
						   var message = $("textarea#message").val();
						   var firstName = name; <!--  For Success/Failure Message
							   <!--  Check for white space in name for Success/Fail message
							if (firstName.indexOf(' ') >= 0) {
						 firstName = name.split(' ').slice(0, -1).join(' ');
							 }        
					   $.ajax({
								  url: "index.php?route=product/product/fastorder",
								  type: "POST",
								  data: {foproduct: foproduct, foprice: foprice, fomodel: fomodel, fostock: fostock, name: name, emailcustomer: emailcustomer, phone: phone, message: message},
								  cache: false,
								  success: function() {  
								  <!--  Success message
									 $('#success').html("<div class='alert alert-success'>");
									 $('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
									.append( "</button>");
									$('#success > .alert-success')
									.append("<?php echo $entry_fo_send_success; ?>");
						  $('#success > .alert-success')
						  .append('</div>');
									
						  <!-- clear all fields
						  $('#contactForm').trigger("reset");
							},
						 error: function() {    
						<!--  Fail message
						 $('#success').html("<div class='alert alert-danger'>");
								  $('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
								   .append( "</button>");
								  $('#success > .alert-danger').append("<?php echo $entry_fo_send_error; ?>");
								  $('#success > .alert-danger').append('</div>');
						<!-- clear all fields
						$('#contactForm').trigger("reset");
						  },
							   })
							 },
							 filter: function() {
									   return $(this).is(":visible");
							 },
						   });

						  $("a[data-toggle=\"tab\"]").click(function(e) {
										e.preventDefault();
										$(this).tab("show");
							});
					  });
					 

					/*When clicking on Full hide fail/success boxes */ 
					$('#name').focus(function() {
						 $('#success').html('');
					  });
					<!-- --></script>

artem9009 02.10.2015 19:06

Этот код со страницы продукта. Коды из файлов выше указанных слишком длинные, сюда не грузятся ...

laimas 02.10.2015 20:15

Цитата:

Сообщение от artem9009
error: function() {
<!-- Fail message
$('#success').html("<div class='alert alert-danger'>");
$('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
.append( "</button>");
$('#success > .alert-danger').append("<?php echo $entry_fo_send_error; ?>");
$('#success > .alert-danger').append('</div>');
<!-- clear all fields
$('#contactForm').trigger("reset");
},
})
}


Офигеть.

error: функция, которая будет вызвана в случае неудачного завершения запроса к серверу. error относится к ajax-событиям, это ошибки XMLHttpRequest. Переопределять внаглую их специально заголовками сервера....

Где это такое в реальном jqBootstapValidation выкопано? Нет и не может быть в нем такого.

Вообще-то, должна быть отправка, и тип данных возвращаемых json, что удобно. Если в success: сервер вернет ошибку, то работа над ошибками, иначе закрываем форму.


Часовой пояс GMT +3, время: 07:05.