Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Если одна из форм заполнена, скрипт не должен отрабатывать (https://javascript.ru/forum/misc/69285-esli-odna-iz-form-zapolnena-skript-ne-dolzhen-otrabatyvat.html)

SkyRewir 11.06.2017 18:26

Если одна из форм заполнена, скрипт не должен отрабатывать
 
Добрый день!
Помогите пожалуйста с решение вопроса

Есть сайт www.mypravo.kz
На нем есть три формы, скриншоты с формами
https://drive.google.com/open?id=0Bw...zN4aXNicVNkNDg
https://drive.google.com/open?id=0Bw...nI0RTJ6bldicVE

есть скрипт вызова модального диалога, когда человек выходит с сайта,
он подключен отдельным файлом config.js, работает от плагина arcticmodal
Код файла config.js
$(document).ready(function () {
    if (!$.cookie('smartCookies')) {

      $(document).mouseleave(function (e) {
        function getWindow() {
          $('.offer').arcticmodal({
            closeOnOverlayClick: true,
            closeOnEsc: true
          });
        };
        setTimeout(getWindow, 1);
        $.cookie('smartCookies', true, {
          expires: 7,
          path: '/'
        });
      });
    };
  });


Код разметки формы
<div class="modalInner">
    <section class="offer">
    	<form method="post" action="rrr.html" class="fff">
			<div class="form-group form-inline">
				<input type="checkbox" name="fo_1">Не хватило информации об услуге
				<input type="text" class="form-control" name="fo_1_1" placeholder="Какой информации?">
			</div>		
			<div class="form-group form-inline">
				<input type="checkbox" name="fo_2">Не хватило информации о компании
				<input type="text" class="form-control" name="fo_2_2" placeholder="Какой информации?">
			</div>		           
		    <div class="form-group form-inline">
		    	<input type="checkbox" name="fo_3">Не нашел(-шла) услугу, которую искал(-а)
				<input type="text" class="form-control" name="fo_3_3" placeholder="Какую услугу?">
		    </div>
		    <div class="form-group form-inline">         
				<input type="checkbox" name="fo_4">Компания не вызывает доверия
		    </div>

			<div class="form-group form-inline">
				<input type="checkbox" name="fo_5">Не нужнаюсь в услуге сейчас, просто ищу информацию
			</div>
		              
			<div class="form-group form-inline">
				<input type="checkbox" name="fo_6">Не могу с вами связаться
			</div>
		              
			<div class="form-group form-inline">
				<input type="checkbox" name="fo_7">Выбрал другую компанию, потому что
				<input type="text" class="form-control" name="fo_7_7" placeholder="Почему?">
			</div>
		    <div class="form-group form-inline">      
				<input type="checkbox" name="fo_8">Уже позвонил
			</div>
			<div class="form-group form-inline">
				<input type="checkbox" name="fo_9">Заходил(-ла) не в первый раз, просто уточнить информацию
			</div>
		    <div class="form-group form-inline">         
				<input type="checkbox" name="fo_10">Личный комментарий
				<input type="text" class="form-control" name="fo_10_10" placeholder="Ваше мнение">
			</div>
			<div class="form-group form-inline">
			Введите Ваш email<input type="email" class="form-control" name="email_fo" required placeholder="Ведите ваш email">
			</div>
		<button type="submit" class="button_popup">Отправить</button>
      </form>
	</section>
  </div>


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

Спасибо!

laimas 11.06.2017 18:53

Так и надо было сразу вопрос ставить, а то кнопки, щелчки... ничего не понять, что надо. )

В ранее показанном коде обработчика отправки формы добавить это:

$.cookie('smartCookies', true, {
          expires: 7,
          path: '/'
        });

SkyRewir 11.06.2017 20:00

Цитата:

Сообщение от laimas (Сообщение 455204)
Так и надо было сразу вопрос ставить, а то кнопки, щелчки... ничего не понять, что надо. )

В ранее показанном коде обработчика отправки формы добавить это:

$.cookie('smartCookies', true, {
          expires: 7,
          path: '/'
        });

Этот кусок кода вроде бы есть
$(document).ready(function () {
      $(document).mouseleave(function (e) {
        function getWindow() {
          $('.offer').arcticmodal({
            closeOnOverlayClick: true,
            closeOnEsc: true
          });
        };
 !!!!!   setTimeout(getWindow, 1);
          $.cookie('smartCookies', true, {
          expires: 7,
          path: '/'
        });               !!!!!!
      });

    };
  });

laimas 11.06.2017 20:18

Цитата:

Сообщение от SkyRewir
Этот кусок кода вроде бы есть

Этот код к отправке формы отношения не имеет.

SkyRewir 11.06.2017 20:55

$(function() {
	    $('form').submit(function() {
	        if(!$(this).find('input:checked').length) {
	            alert('Выберите один из вариантов');
	            return false
	        }
	    }).find('input:checkbox').change(function() {
	        $(this).closest('.input-group-addon').find('input:text').prop('required', this.checked).attr('placeholder', this.checked ? 'Заполните' : '')
	    });
           $.cookie('smartCookies', true, {
	          expires: 7,
	          path: '/'
	        });
	});

Вот так?

laimas 12.06.2017 00:34

Цитата:

Сообщение от SkyRewir
Вот так?

Я думал такие же дебаты как и в личку закончились. )

Цитата:

Сообщение от SkyRewir
озможно ли сделать так что, при отправке какой либо из трех форм

А где в коде форма отправляется?

$('form').submit(function() { //это событие при отправлении формы
            if(!$(this).find('input:checked').length) {
                alert('Выберите один из вариантов');
                return false
            }
            //и гарантированно, что форма отправлена, это здесь
            $.cookie('smartCookies', true, {
                 expires: 7,
                 path: '/'
            });  
        }).find('input:checkbox').change(function()

SkyRewir 13.06.2017 06:23

Цитата:

Сообщение от laimas (Сообщение 455221)
Я думал такие же дебаты как и в личку закончились. )



А где в коде форма отправляется?

$('form').submit(function() { //это событие при отправлении формы
            if(!$(this).find('input:checked').length) {
                alert('Выберите один из вариантов');
                return false
            }
            //и гарантированно, что форма отправлена, это здесь
            $.cookie('smartCookies', true, {
                 expires: 7,
                 path: '/'
            });  
        }).find('input:checkbox').change(function()

Эта форма проверяет заполненные поля и нажатые чекбоксы
Форма отправляется post методом через кнопку, в другой в файл-обработчик, а от него идет перенаправление на страницу с благодарностью.
Нужно как-то отловить людей,которые отправили формы со скриншотов и не показывать им модальный диалог за который отвечает этот код

$(document).ready(function () {
    if (!$.cookie('smartCookies')) {

      $(document).mouseleave(function (e) {
        function getWindow() {
          $('.offer').arcticmodal({
            closeOnOverlayClick: true,
            closeOnEsc: true
          });
        };
        setTimeout(getWindow, 1);
        $.cookie('smartCookies', true, {
          expires: 7,
          path: '/'
        });
      });
    };
  });

laimas 13.06.2017 06:38

Вы запускали предложенное? Последняя попытка пояснения, далее думайте сами.

if (!$.cookie('smartCookies')) { - если у клиента не установлена кука, то
$(document).mouseleave(function (e) { - по уходу с клиентской области показать окно и установить куку, то есть после этого окно уже не будет показываться.

Чтобы оно не показывалось и после отправления любой из форм, эту куку нужно установить и при отправлению формы. Как это сделать и было показано.

Вопрос который может возникнуть здесь, так это о времени действия куки, но это вопрос ни столько самого кода, а логики вашего приложения, и насколько "прикукить" клиента решать не мне, а вам.

Что еще нужно?

SkyRewir 13.06.2017 07:26

laimas прошу прощения, что я такой тугодум
Я просто не могу понять правильно ли написан код(

Цитата:

Сообщение от SkyRewir (Сообщение 455217)
$(function() {
	    $('form').submit(function() {
	        if(!$(this).find('input:checked').length) {
	            alert('Выберите один из вариантов');
	            return false
	        }
	    }).find('input:checkbox').change(function() {
	        $(this).closest('.input-group-addon').find('input:text').prop('required', this.checked).attr('placeholder', this.checked ? 'Заполните' : '')
	    });
           $.cookie('smartCookies', true, {
	          expires: 7,
	          path: '/'
	        });
	});


laimas 13.06.2017 07:37

Вопрос - что выполняется этим обработчиком:

.find('input:checkbox').change(function()

отправление формы или же изменения состояния флажков? Ну ежику же понятно, что изменение состояние флажков.

Спрашивалось "при отправке какой либо из трех форм" запретить показ окна. А обрабатывается отправка формы здесь: $('form').submit(function(), и уже было показано, что в этот обработчик и поместить (добавить) запись куки. Чего вы его лепите не туда куда следует, вообще за пределы этих обработчиков?


Что $(document).ready(function (), что $(function(), это одно и тоже, а значит перенесите все в одно место, пусть так:

$(document).ready(function () {
    if (!$.cookie('smartCookies')) {
        $(document).mouseleave(function (e) {
            function getWindow() {
                $('.offer').arcticmodal({
                    closeOnOverlayClick: true,
                    closeOnEsc: true
                });
            };
            setTimeout(getWindow, 1);
            $.cookie('smartCookies', true, {
                expires: 7,
            path: '/'
            });
        });
    }
    $('form').submit(function() {
        if(!$(this).find('input:checked').length) {
            alert('Выберите один из вариантов');
            return false
        }
        $.cookie('smartCookies', true, {
            expires: 7,
            path: '/'
        });
    }).find('input:checkbox').change(function() {
        $(this).closest('.input-group-addon').find('input:text').prop('required', this.checked).attr('placeholder', this.checked ? 'Заполните' : '')
    });
});


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