Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 20.07.2017, 19:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

DjonyBastone,
2 решено
3 решено без fancybox
4 нет необходимости
Ответить с цитированием
  #12 (permalink)  
Старый 20.07.2017, 20:22
Интересующийся
Отправить личное сообщение для DjonyBastone Посмотреть профиль Найти все сообщения от DjonyBastone
 
Регистрация: 20.07.2017
Сообщений: 10

Сообщение от рони Посмотреть сообщение
DjonyBastone,
2 решено
3 решено без fancybox
4 нет необходимости
Пункт 2:

В вашем примере тестировал (здесь на сайте в сообщении)

Если ввожу имя и мейл, выключил чек-бокс и нажал кнопку отправить. И всё пропадает - как будто форма совершила submit

У себя в проекте форма тоже отправляет данные.

Напрашивается вопрос - А вообще верно ли указана проверка на чек-бокс? consent : {required: true}
По умолчанию в html атрибут поставлен - checked. Может он по умолчанию считает валидным чек-бокс.

Поясните пожалуйста, если я не прав
Ответить с цитированием
  #13 (permalink)  
Старый 20.07.2017, 20:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от DjonyBastone
атрибут поставлен - checkedМожет он по умолчанию считает валидным чек-бокс.
да-- если галочки не будет --- будет сообщение из содержимого title, этого поля "Нужно принять соглашение"

Сообщение от DjonyBastone
Если ввожу имя и мейл, выключил чек-бокс и нажал кнопку отправить. И всё пропадает
скорее всего у вас в коде ошибка и валидация отсутствует
Ответить с цитированием
  #14 (permalink)  
Старый 20.07.2017, 22:18
Интересующийся
Отправить личное сообщение для DjonyBastone Посмотреть профиль Найти все сообщения от DjonyBastone
 
Регистрация: 20.07.2017
Сообщений: 10

CSS ломает скрипт
Нашел ошибку.

В CSS чек-бокс был скрыт
Код:
.form__checkbox input {
    display: none; 
}
в первые встречается такое поведение
Ответить с цитированием
  #15 (permalink)  
Старый 20.07.2017, 23:07
Интересующийся
Отправить личное сообщение для DjonyBastone Посмотреть профиль Найти все сообщения от DjonyBastone
 
Регистрация: 20.07.2017
Сообщений: 10

А как вызвать модальное окно с соглашением?

Код:
messages: {
                   
                    consent : {
                        required: function () {
                            alert('Надо вызвать fancybox')
                        }
                    }
                }
Полагаю что нужно вместо alert - вставить вызов

Только вызов всплывающего окна не получается

Пробовал:
и функцию с методом fancybox
и имитацию клика по ссылке

подскажите пожалуйста
Ответить с цитированием
  #16 (permalink)  
Старый 20.07.2017, 23:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от DjonyBastone
вместо alert - вставить вызов
$.fancybox.open('<p>Надо вызвать fancybox</p>')
Ответить с цитированием
  #17 (permalink)  
Старый 21.07.2017, 00:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

DjonyBastone,

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="http://jqueryvalidation.org/files/dist/jquery.validate.js"></script>
  <link rel="stylesheet" type="text/css" href="http://fancyapps.com/fancybox/source/jquery.fancybox.css">
  <script type='text/javascript' src="http://fancyapps.com/fancybox/source/jquery.fancybox.js"></script>
  <script>
$(function() {
$.validator.setDefaults({
     submitHandler: function () {
         alert("Всё ок!");
     }
 });


$.validator.addMethod("always", function (value, element) {
         return  $('[name="email"]').val().trim()||$('[name="tel"]').val().trim()
     },
     "email или телефон нужно заполнить")


$(".validate").validate({
         rules: {
             consent : {required: true},
             tel: {always: true},
             email: {always: true}
         },
         messages: {

                    consent : {
                        required: function () {
                            $.fancybox($(".hot"));
                        }
                    }
                }
     })
});
  </script>
</head>

<body>
<form action="form.php" class="validate" >
        <h3>Заказать консультацию <span>специалиста</span></h3>
        <p>Оставьте контактные данные и в течении 5 минут вам перезвонит опытный специалист!</p>
        <div class="wrap_input">
          <input type="text" name="name" placeholder="Введите Ваше имя" required >
          <i class="fa fa-user" aria-hidden="true"></i>
        </div>
        <div class="wrap_input">
          <input type="email" name="email" placeholder="Введите Ваш email">
          <i class="fa fa-phone" aria-hidden="true"></i>
        </div>
        <div class="wrap_input">
          <input type="tel" name="tel" placeholder="Введите Ваш телефон">
          <i class="fa fa-phone" aria-hidden="true"></i>
        </div>
                <div class="form__checkbox">
                    <label for="form__checkbox">
                        <span>
                            <input id="form__checkbox" title="Нужно принять соглашение" name="consent" type="checkbox" checked>
                            <i></i>
                        </span>
                        <a href="#consent_form" class="popup consent">Нажимая кнопку «Получить консультацию», я даю свое согласие на обработку моих персональных данных, в соответствии с Федеральным законом от 27.07.2006 года №152-ФЗ «О персональных данных», на условиях и для целей, определенных в Согласии на обработку персональных данных</a>
                    </label>
                </div>
        <button type="submit" class="red_btn">получить консультацию</button>
      </form>

<style type="text/css">
    .hot{
         border: 1px dashed Gray; padding: 5px; height: 100px; width: 100px; display:  none;
    }

  </style>
 <div class="hot">Нужно принять соглашение</div>
</body>
</html>
Ответить с цитированием
  #18 (permalink)  
Старый 27.07.2017, 21:12
Интересующийся
Отправить личное сообщение для DjonyBastone Посмотреть профиль Найти все сообщения от DjonyBastone
 
Регистрация: 20.07.2017
Сообщений: 10

Рони, спасибо большое!!

Кому потребуется - решение по валидации нескольких форм, одним способом.

var validate1 = {
        rules: {
            name: {required: true},
            tel: {always: true},
            email: {
                always: true,
                email: true
            },
            consent : {required: true}
        },
        messages: {
            name: {
                required: 'Поле Имя обязательно к заполнению'
            },
            tel: {
                always: 'Необходимо ввести E-mail или телефон'
            },
            email: {
                always: 'Необходимо ввести E-mail или телефон',
                email: 'Необходимо ввести правильный E-mail'

            },
            consent : {
                required: function () {
                    $.fancybox({
                        href: "#consent_form",
                        margin: [40, 45, 40, 45],
                        helpers: {
                            media: {},
                            overlay: {}
                        },
                        scrollOutside: true
                    });
                }
            }
        },
        errorPlacement: function(error, element) {},
        success: function() {},
        highlight: function(element, errorClass) {
            $(element).parent().addClass('error');
        },
        unhighlight: function(element, errorClass, validClass) {
            $(element).parent().removeClass('error');
        }

    };

    $(".validate1").validate(validate1);

    $(".validate2").validate(validate1);

    $(".validate_cons").validate(validate1);
Ответить с цитированием
  #19 (permalink)  
Старый 31.07.2017, 13:36
Интересующийся
Отправить личное сообщение для DjonyBastone Посмотреть профиль Найти все сообщения от DjonyBastone
 
Регистрация: 20.07.2017
Сообщений: 10

А теперь 2 формы на странице
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="test.css">
    <link rel="stylesheet" href="http://farpotolok.ru/css/jquery.fancybox-min.css" type="text/css" media="screen" />
    <script type='text/javascript' src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script type='text/javascript' src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.js"></script>
    <script type='text/javascript' src="http://fancyapps.com/fancybox/source/jquery.fancybox.js"></script>
    <script>
    $(document).ready(function () {
        $(".fancybox_close").on("click", function() {
            $.fancybox.close()
        });

        $("#consent").fancybox({
            margin: [40, 45, 40, 45],
            helpers: {
                media: {},
                overlay: {}
            },
            scrollOutside: true
        });

        $('.submit_form').click(function(){
            $('.form__checkbox_input').prop('checked', true);
            $.fancybox({
                href: "#accept",
                margin: [40, 45, 40, 45],
                helpers: {
                    overlay: {}
                }
            });
        });

        $('.no-submit_form').click(function(){
            $('.form__checkbox_input').prop('checked', false);
            $.fancybox({
                href: "#no_accept",
                margin: [40, 45, 40, 45],
                helpers: {
                    overlay: {}
                }
            });
        });



        $(function() {
            $.validator.setDefaults({
                submitHandler: function () {
                    alert("Всё ок!");
                }
            });

            $.validator.addMethod('always', function (value, element) {
                return  $('[name="email"]').val().trim()||$('[name="tel"]').val().trim()
            }, 'Необходимо ввести E-mail или телефон');

            $("#validate1").validate({
                rules: {
                    name: {required: true},
                    tel: {
                        always: true
                    },
                    email: {
                        always: true,
                        email: true
                    },
                    consent : {required: true}
                },
                messages: {
                    name: {
                        required: 'Поле Имя обязательно к заполнению'
                    },
                    email: {
                        email: 'Необходимо ввести правильный E-mail'
                    },
                    consent : {
                        required: function () {
                            $.fancybox({
                                href: "#consent_form",
                                margin: [40, 45, 40, 45],
                                helpers: {
                                    media: {},
                                    overlay: {}
                                },
                                scrollOutside: true
                            });
                        }
                    }
                },
                success: "vse-ok",
                highlight: function(element, errorClass) {
                    $(element).parent().addClass('error');
                },
                unhighlight: function(element, errorClass, validClass) {
                    $(element).parent().removeClass('error');
                }
            });
        });

        $(function() {
            $.validator.setDefaults({
                submitHandler: function () {
                    alert("Всё ок!");
                }
            });

            $.validator.addMethod('always', function (value, element) {
                return  $('[name="email"]').val().trim()||$('[name="tel"]').val().trim()
            }, 'Необходимо ввести E-mail или телефон');

            $("#validate2").validate({
                rules: {
                    name: {required: true},
                    tel: {
                        always: true
                    },
                    email: {
                        always: true,
                        email: true
                    },
                    consent : {required: true}
                },
                messages: {
                    name: {
                        required: 'Поле Имя обязательно к заполнению'
                    },
                    email: {
                        email: 'Необходимо ввести правильный E-mail'
                    },
                    consent : {
                        required: function () {
                            $.fancybox({
                                href: "#consent_form",
                                margin: [40, 45, 40, 45],
                                helpers: {
                                    media: {},
                                    overlay: {}
                                },
                                scrollOutside: true
                            });
                        }
                    }
                },
                success: "vse-ok",
                highlight: function(element, errorClass) {
                    $(element).parent().addClass('error');
                },
                unhighlight: function(element, errorClass, validClass) {
                    $(element).parent().removeClass('error');
                }
            });
        });
    })
</script>
</head>
<body>
<form id="validate1" action="" method="post" class="validate" >
    <h3>Заказать консультацию <span>специалиста</span></h3>
    <p>Оставьте контактные данные и в течении 5 минут вам перезвонит опытный специалист!</p>
    <div class="wrap_input">
            <input type="text" name="name" placeholder="Введите Ваше имя" required>
            <i class="fa fa-user" aria-hidden="true"></i>
    </div>
    <div class="wrap_input">
            <input class="contact_group" type="email" name="email" placeholder="Введите Ваш email">
            <i class="fa fa-phone" aria-hidden="true"></i>
    </div>
    <div class="wrap_input">
            <input class="contact_group" type="tel" name="tel" placeholder="Введите Ваш телефон">
            <i class="fa fa-phone" aria-hidden="true"></i>
    </div>
    <div class="form__checkbox">
            <label for="form__checkbox">
                <span>
                <input id="form__checkbox" title="Нужно принять соглашение" name="consent" type="checkbox" checked>
                <i></i>
            </span>
            <a href="#consent" class="popup consent">Нажимая кнопку «Получить консультацию», тро-ло-ло</a>
            </label>
    </div>
    <button type="submit" class="red_btn">получить консультацию</button>
</form>
<form id="validate2" action="" method="post" class="validate" >
    <h3>Заказать консультацию <span>специалиста</span></h3>
    <p>Оставьте контактные данные и в течении 5 минут вам перезвонит опытный специалист!</p>
    <div class="wrap_input">
            <input type="text" name="name" placeholder="Введите Ваше имя" required>
            <i class="fa fa-user" aria-hidden="true"></i>
    </div>
    <div class="wrap_input">
            <input class="contact_group" type="email" name="email" placeholder="Введите Ваш email">
            <i class="fa fa-phone" aria-hidden="true"></i>
    </div>
    <div class="wrap_input">
            <input class="contact_group" type="tel" name="tel" placeholder="Введите Ваш телефон">
            <i class="fa fa-phone" aria-hidden="true"></i>
    </div>
    <div class="form__checkbox">
            <label for="form__checkbox">
                <span>
                <input id="form__checkbox" title="Нужно принять соглашение" name="consent" type="checkbox" checked>
                <i></i>
            </span>
            <a href="#consent" class="popup consent">Нажимая кнопку «Получить консультацию», тро-ло-ло</a>
            </label>
    </div>
    <button type="submit" class="red_btn">получить консультацию</button>
</form>
<div style="display: none">
    <div id="thanks" class="popup">
        <form>
            <p>Данные отправлены.
                <br>С вами кое-кто свяжется!</p>
            <a href="#" class="fancybox_close">Вернуться на сайт</a>
        </form>
    </div>
</div>
<div style="display: none">
    <div id="accept" class="popup">
        <form>
            <h3>Соглашение принято!</h3>
            <h4>Заполните и отправьте данные!</h4>
            <a href="#" class="fancybox_close">Вернуться на сайт к запонению</a>
        </form>
    </div>
</div>
<div style="display: none">
    <div id="no_accept" class="popup popup__after">
        <h3>Соглашение не принято!</h3>
        <p>Это зря</p>
        <a href="#" class="fancybox_close">Вернуться на сайт</a>
    </div>
</div>
<div style="display: none">
    <div id="consent_form" class="consent__popup consent__popup_form">
        <div class="consent__popup consent__popup_text">
            <h3>Согласие на обработку персональных данных:</h3>
            <p>Tro-lo-lo</p>
        </div>
        <div class="consent__popup_btn">
            <button class="consent__popup_btn1 submit_form blue_btn">Принимаю</button>
            <button class="consent__popup_btn1 no-submit_form red_btn">Не принимаю</button>
        </div>
    </div>
</div>
<div style="display: none">
    <div id="consent" class="consent_list consent__popup consent__popup_text">
        <h3>Согласие на обработку персональных данных:</h3>
        <p>Tro-lo-lo</p>
    </div>
</div>
</body>
</html>
Ответить с цитированием
  #20 (permalink)  
Старый 31.07.2017, 13:37
Интересующийся
Отправить личное сообщение для DjonyBastone Посмотреть профиль Найти все сообщения от DjonyBastone
 
Регистрация: 20.07.2017
Сообщений: 10

Помогите пожалуйста с формами.
Помогите пожалуйста с формами.

Уже по всякому извращался, не робит как надо.

Суть проблемы:
  1. Первая форма емейл/телефон проверяет нормально. Когда дело доходит до второй формы, метод проверки как будто ломается. Номер телефона правильно набираю, но валидация не проходит.
  2. Снимаю галку с чек-бокса, нажимаю кнопку получить консультацию, всплывает окно - это работает, но когда нажимаю кнопку принять соглашение, должен отметится чек-бокс. Через раз отмечается. после этой процедуры пытаюсь снять/поставить галку - снова всплывает форма, а этого уже не должно быть.

P.S. Подскажите в каком виде нужно вставить код, что бы он был исполняемый?

Последний раз редактировалось DjonyBastone, 31.07.2017 в 13:40. Причина: P.S. добавлен
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валидация формы работает не совсем так Batyabest Events/DOM/Window 12 26.11.2016 02:07
Валидация формы vierhein jQuery 0 28.02.2014 16:40
Валидация формы в зависимости от значения radio batton housewm Events/DOM/Window 1 10.01.2014 18:46
Валидация формы Ваяс Элементы интерфейса 8 11.07.2012 15:20
Валидация формы dmsuslov jQuery 4 05.11.2010 16:12