Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Валидация форм
 
 автор: segazav   (24.09.2014 в 18:03)   письмо автору
 
 

Всем доброго вечера!

Столкнулся с проблемой привязки своего скрипта в готовый скрипт валидации форм на JQuery.

Необходимо сделать так, чтобы мой код отображения анимации загрузки срабатывал в том случае, когда нет не одного сообщения "message" об ошибке. Не знаю как и к чему его привязать, пробовал разные варианты, но ни один не работает так как нужно!

Вот сам код валидации:


$(document).ready(function(){

$("form").validate({
        
rules:{ 

gorod:
{
required: true,
},        

user:
{
required: true,
minlength: 2,
maxlength: 40,
},

e_mail:
{
required: true,
email: true,
maxlength: 40,
},

zagolovok:
{
required: true,
minlength: 10,
maxlength: 60,
},
text_obyavl:
{
required: true,
minlength: 20,
maxlength: 2000,
},
       },
       
messages:{

gorod:
{
required: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Это поле обязательное для заполнения!</div>"
},        

user:
{
required: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Это поле обязательное для заполнения!</div>",
minlength: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Контактное лицо: не менее 2 символов!</div>",
maxlength: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Контактное лицо: не более 40 символов!</div>",
},

e_mail:
{
required: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Это поле обязательное для заполнения!</div>",
maxlength: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>E_mail: не более 40 символов!</div>",
email: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Не верный формат E-mail адреса!</div>",
},
            
zagolovok:
{
required: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Это поле обязательное для заполнения!</div>",
minlength: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Заголовок: не менее 10 символов!</div>",
maxlength: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Заголовок: не более 60 символов!</div>",
},

text_obyavl:
{
required: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Это поле обязательное для заполнения!</div>",
minlength: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Текст объявления: не менее 20 символов!</div>",
maxlength: "<div style='font-family: Verdana, Arial, Helvetica, sans-serif; color: #FF0000; font-size: 10px;'>Текст объявления: не более 2000 символов!</div>",
},
        
         },

success: 

// моя функция
function(){
var background = $('<div>').css({'backgroundColor' : '#000', 'width' : '100%', 'height' : '100%', 'position' : 'fixed', 'z-index' : '9', 'top' : '0', 'left' : '0', 'opacity' : '0.6'});
var image = $('<img>').attr({'src': '../image/zagruzka.gif'});
var text = $('<span>').text('Дождитесь завершения загрузки!').css({'font-family': 'Verdana, Arial, Helvetica, sans-serif', 'font-weight': 'bold', 'font-size': '16px', 'color': '#FFFFFF'});
var loading = $('<div>').css({'z-index' : '10', 'position' : 'fixed', 'top' : '40%', 'left' : '45%', 'margin' : '-64px 0 0 -64px', 'text-align': 'center'})
.html(image).append('<br><br>').append(text);

$('#submit').click(function(){
if (....не знаю как задать условие, чтобы функция срабатывала только при отсутствии каких либо ошибок валидации формы.....) {$('body').prepend(loading).prepend(background);}
});
// моя функция
},
        
    });


});

  Ответить  
 
 автор: Deed   (24.09.2014 в 19:00)   письмо автору
 
   для: segazav   (24.09.2014 в 18:03)
 

Мне плохо. Откройте форточку...
Через час буду дома - напишу, если никто не ответит.

  Ответить  
 
 автор: segazav   (24.09.2014 в 19:47)   письмо автору
 
   для: Deed   (24.09.2014 в 19:00)
 

Ну а все таки....

  Ответить  
 
 автор: Deed   (24.09.2014 в 21:05)   письмо автору
 
   для: segazav   (24.09.2014 в 19:47)
 

easy example:

<!DOCTYPE html>
<html>
  <head>
  <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
  <meta charset="utf-8">
  <title>VF</title>
  <style type="text/css">
    .error_span{
      color:red;
      font-weight:600;
      margin-left: 11px;
    }
  </style>
</head>
<body>
<script type="text/javascript">
  $(document).ready(function(){
    $('button').click(function(){
      $('span.error_span').remove();
      var nm = $('#name').val();
      var ml = $('#soap').val();
      var st = $('#sity').val();
      if(!/[\wа-яё]{2,40}/i.test(nm)){
        alarm($('#name'));
        return false;
      }
      else if(!/[\w-]+?@[a-z][\w]+?\.[a-z]{2,6}/i.test(ml)){
        alarm($('#soap'));
        return false;
      }
      else if(!/[а-яё-]+(\s[а-яё-])?|[a-z-]+/i.test(st)){
        alarm($('#sity'));
        return false;
      }
      else{
        //Do our AJAX
      }
    });
  });
  function alarm(b){
    $('<span class="error_span">Bad!</span>').insertAfter(b).fadeOut(5000);
  }
</script>
<form>
  <span>Name:</span>&nbsp;
  <input type="text" id="name" maxlength=40 /><br>
  <span>Email:</span>&nbsp;
  <input type="email" id="soap" maxlength=40 /><br>
  <span>Sity:</span> &nbsp; &nbsp; 
  <input type="text" id="sity" maxlength=40 />
</form><br><br>
  <button id="sf">Send!</button>
  </body>
</html>

  Ответить  
 
 автор: segazav   (24.09.2014 в 22:20)   письмо автору
 
   для: Deed   (24.09.2014 в 21:05)
 

Что то я не совсем понял...
К сожалению, я плохо разбираюсь в JS, поэтому и обратился за помощью.

  Ответить  
 
 автор: Deed   (24.09.2014 в 22:42)   письмо автору
 
   для: segazav   (24.09.2014 в 22:20)
 

<!DOCTYPE html>
<html>
  <head>
  <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
  <meta charset="utf-8">
  <title>VF</title>
  <style type="text/css">
    .error_span{
      color:red;
      font-weight:600;
      margin-left: 11px;
    }
  </style>
</head>
<body>
<script type="text/javascript">
  $(document).ready(function(){
    $('button').click(function(){             //по клику на кнопке
      $('span.error_span').remove();  //удаляем прежние сообщения об ошибках (если они есть)
      var nm = $('#name').val();            // получаем значение поля "Имя"
      var ml = $('#soap').val();              // ----  //  ----  //  ----                      "мыло"
      var st = $('#sity').val();                   // ------------  //  -------------             название города и т.д.
      if(!/[\wа-яё]{2,40}/i.test(nm)){       // теперь проверяем полученное "Имя" на длину и "кривые" символы
        alarm($('#name'));                     // если такие символы найдены или поле пустое, выводим надпись "Bad!" и останавливаем дальнейшие действия
        return false;
      }
      else if(!/[\w-]+?@[a-z][\w]+?\.[a-z]{2,6}/i.test(ml)){        // то же самое с "мылом"
        alarm($('#soap'));
        return false;
      }
      else if(!/[а-яё-]+(\s[а-яё-]+)?|[a-z-]+/i.test(st)){               // то же - с названием города
        alarm($('#sity'));
        return false;
      }
      else{                                     //НО ЕСЛИ поля заполнены нормально, выполняем все, что у нас запланировано с AJAX.  
        //Do our AJAX 
      }
    });
  });
  function alarm(b){   //функция, которая выводит сообщение о некорректном заполнении поля
    $('<span class="error_span">Bad!</span>').insertAfter(b).fadeOut(5000);
  }
</script>
<form>
  <span>Name:</span>&nbsp;
  <input type="text" id="name" maxlength=40 /><br>
  <span>Email:</span>&nbsp;
  <input type="email" id="soap" maxlength=40 /><br>
  <span>Sity:</span> &nbsp; &nbsp; 
  <input type="text" id="sity" maxlength=40 />
</form><br><br>
  <button id="sf">Send!</button>
  </body>
</html> 

В этом примере регулярки упрощены, а поля приведены как примерные.

  Ответить  
 
 автор: segazav   (25.09.2014 в 00:05)   письмо автору
 
   для: Deed   (24.09.2014 в 22:42)
 

Я не могу понять, что конкретно мне использовать вместо "НО ЕСЛИ поля заполнены нормально..." из вашего примера.
Я уже просмотрел документацию к плагину [url]http://jqueryvalidation.org/category/plugin/
[/url], но так ничего и не придумал.

Пробовал сделать так:

$('#submit').click(function(){
if ($('form').validate().errorList.length == 0) {$('body').prepend(loading).prepend(background);}
});

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

  Ответить  
 
 автор: Deed   (25.09.2014 в 07:11)   письмо автору
 
   для: segazav   (25.09.2014 в 00:05)
 

Да зачем вам этот плагин??
В примере, который я привел, отправка данных формы не будет осуществлена, если хоть какое-то поле заполнено неправильно.
Если же все ОК, тогда вместо "//Do our AJAX" мы прописываем отправку данных на сервер.
Например, наш php-обработчик на сервере - это файл form_val.php.
Тогда:
<!DOCTYPE html>
<html>
  <head>
  <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
  <meta charset="utf-8">
  <title>VF</title>
  <style type="text/css">
    .error_span{
      color:red;
      font-weight:600;
      margin-left: 11px;
    }
  </style>
</head>
<body>
<script type="text/javascript">
  $(document).ready(function(){
    $('button').click(function(){             //по клику на кнопке
      $('span.error_span').remove();  //удаляем прежние сообщения об ошибках (если они есть)
      var nm = $('#name').val();            // получаем значение поля "Имя"
      var ml = $('#soap').val();              // ----  //  ----  //  ----                      "мыло"
      var st = $('#sity').val();                   // ------------  //  -------------             название города и т.д.
      if(!/[\wа-яё]{2,40}/i.test(nm)){       // теперь проверяем полученное "Имя" на длину и "кривые" символы
        alarm($('#name'));                     // если такие символы найдены или поле пустое, выводим надпись "Bad!" и останавливаем дальнейшие действия
        return false;
      }
      else if(!/[\w-]+?@[a-z][\w]+?\.[a-z]{2,6}/i.test(ml)){        // то же самое с "мылом"
        alarm($('#soap'));
        return false;
      }
      else if(!/[а-яё-]+(\s[а-яё-]+)?|[a-z-]+/i.test(st)){               // то же - с названием города
        alarm($('#sity'));
        return false;
      }
      else{                                     //НО ЕСЛИ поля заполнены нормально, выполняем все, что у нас запланировано с AJAX.  
        var datas={user_name:nm,user_mail:ml,user_sity:st}; //формируем массив введенных в форму данных, user_name, user_mail... - это то, что получит файл form_val.php в переменных $_POST['user_name'],$_POST['user_mail']...
        function success(r){  //пишем функцию, которая будет проверять ОТВЕТ файла form_val.php (допустим, если проверка данных на сервере прошла нормально, form_val.php возвращает echo "ok"; если же возникли проблемы - echo "bad'). И этот ответ записывается в переменную "r" - в аргумент функции "success".
           if(r==='ok'){ // все в порядке
              // делаем то, что нужно
           }
           else{
              // выводим сообщение об ошибке
           }
           $.post('../form_val.php',datas,success,'text'); //отправляем запрос с данными (datas) на сервер файлу form_val.php, после ответа выполняем функцию success, а сам ответ ждем в формате text.
        }
      }
    });
  });
  function alarm(b){   //функция, которая выводит сообщение о некорректном заполнении поля
    $('<span class="error_span">Bad!</span>').insertAfter(b).fadeOut(5000);
  }
</script>
<form>
  <span>Name:</span>&nbsp;
  <input type="text" id="name" maxlength=40 /><br>
  <span>Email:</span>&nbsp;
  <input type="email" id="soap" maxlength=40 /><br>
  <span>Sity:</span> &nbsp; &nbsp; 
  <input type="text" id="sity" maxlength=40 />
</form><br><br>
  <button id="sf">Send!</button>
  </body>
</html> 


Вот и все.

  Ответить  
 
 автор: segazav   (25.09.2014 в 11:48)   письмо автору
 
   для: Deed   (25.09.2014 в 07:11)
 

Я не пойму, как это все реализовать в моём примере?

Нужно чтобы срабатывала моя функция лишь в случае когда все поля формы заполнены верно и
форма отправлялась стандартным методом (Ajax мне не нужен).

Добавил конструкцию submitHandler. Да, теперь срабатывает если все верно, но только кода первый раз кликаешь по кнопке submit вообще ничего не происходит.
При втором клике моя функция срабатывает, а форма не отправляется.

Почему так? Что нужно подправить?

submitHandler: function() {
var background = $('<div>').css({'backgroundColor' : '#000', 'width' : '100%', 'height' : '100%', 'position' : 'fixed', 'z-index' : '9', 'top' : '0', 'left' : '0', 'opacity' : '0.6'});
var image = $('<img>').attr({'src': '../image/zagruzka.gif'});
var text = $('<span>').text('Дождитесь завершения загрузки!').css({'font-family': 'Verdana, Arial, Helvetica, sans-serif', 'font-weight': 'bold', 'font-size': '16px', 'color': '#FFFFFF'});
var loading = $('<div>').css({'z-index' : '10', 'position' : 'fixed', 'top' : '40%', 'left' : '45%', 'margin' : '-64px 0 0 -64px', 'text-align': 'center'})
.html(image).append('<br><br>').append(text);

$('#submit').click(function(){
$('body').prepend(loading).prepend(background);
});
}

  Ответить  
 
 автор: Deed   (25.09.2014 в 14:12)   письмо автору
 
   для: segazav   (25.09.2014 в 11:48)
 

Тогда все еще проще:
вместо
else{                                     //НО ЕСЛИ поля заполнены нормально, выполняем все, что у нас запланировано с AJAX.  
        var datas={user_name:nm,user_mail:ml,user_sity:st}; //формируем массив введенных в форму данных, user_name, user_mail... - это то, что получит файл form_val.php в переменных $_POST['user_name'],$_POST['user_mail']...
        function success(r){  //пишем функцию, которая будет проверять ОТВЕТ файла form_val.php (допустим, если проверка данных на сервере прошла нормально, form_val.php возвращает echo "ok"; если же возникли проблемы - echo "bad'). И этот ответ записывается в переменную "r" - в аргумент функции "success".
           if(r==='ok'){ // все в порядке
              // делаем то, что нужно
           }
           else{
              // выводим сообщение об ошибке
           }
           $.post('../form_val.php',datas,success,'text'); //отправляем запрос с данными (datas) на сервер файлу form_val.php, после ответа выполняем функцию success, а сам ответ ждем в формате text.
        }
      } 

Пишем:


else{                     //НО ЕСЛИ поля заполнены нормально, отправляем данные стандартным методом:
              $('form').submit();
      } 

И при этом наша форма должна иметь атрибут экшн:
<form action="handler.php">

где handler.php - наш серверный обработчик.

P.S. Тот "плагин", с которым вы пытаетесь разобраться - кошмарен.

  Ответить  
 
 автор: segazav   (25.09.2014 в 14:17)   письмо автору
 
   для: Deed   (25.09.2014 в 14:12)
 

Спасибо за помощь, буду пробовать...
А почему вы считаете, что данный плагин кошмарен?

  Ответить  
 
 автор: Deed   (25.09.2014 в 14:24)   письмо автору
 
   для: segazav   (25.09.2014 в 14:17)
 

Ну, как бы объяснить... Короче, чтобы забить гвоздь, гидравлический пресс не нужен, достаточно молотка.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования