Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка динамических полей на валидацию (https://javascript.ru/forum/misc/79366-proverka-dinamicheskikh-polejj-na-validaciyu.html)

Katy93 29.01.2020 10:52

Проверка динамических полей на валидацию
 
Как проверить поля на валидацию, которые добавляются в форму динамически, раньше я получала value поля с помощью id и его проверяла. Теперь поля добавляются динамически и с помощью id не получается. Вот у меня есть html код который я написала, пока сделала без динамического добавления а просто создала 3 строки с полями по 3 поля в каждой строке age, exp, gender. Нужно проверить каждое поле каждой строки при этом поля одной строки между собой связаны. В итоге ошибка о неправильном заполнении должна вывестись в ячейку ниже input'а, id="num_error_message". Вот мой код, там есть пример с одним полем. Как можно сделать валидацию, для всех полей в таблице?
<html>
<head><title>Test</title>
 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
 $(document).ready(function(e){
  var error_num1;
    $('#pole').keypress('', function () {
       var pattern = /^\d+$/;
       var num = $("#pole").val();
       if (pattern.test(num) && num !== '') {
         $("#num_error_message1").hide();
         $("#pole").css("border-bottom","2px solid #34F458");
       }else
       {
          $("#num_error_message1").html("Только цифры");
          $("#num_error_message1").show();
          $("#pole").css("border-bottom","2px solid #F90A0A");
          error_num1 = true;
       }
    });
   });
</script>
</head>
<body>
<form method="POST" action="form.php">
<input id="pole"><br>
<span class="error_form" id="num_error_message1"></span>
<table border="0">
  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><input type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" id="num_error_message"></span></td>
    <td><span class="error_form" id="num_error_message"></span></td>
    <td><span class="error_form" id="num_error_message"></span></td>
  </tr>

  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><input type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" id="num_error_message"></span></td>
    <td><span class="error_form" id="num_error_message"></span></td>
    <td><span class="error_form" id="num_error_message"></span></td>
  </tr>
  
  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><input type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" id="num_error_message"></span></td>
    <td><span class="error_form" id="num_error_message"></span></td>
    <td><span class="error_form" id="num_error_message"></span></td>
  </tr>
<br>
</table>
  <input type="submit" value="Отправить">
</form>
 </body>
 </html>

рони 29.01.2020 11:58

Katy93,
<!DOCTYPE html>
<html>
<head><title>Test</title>
<style type="text/css">
.err{
  border-bottom: 2px solid #F90A0A;
}
.ok{
  border-bottom: 2px solid #34F458;
}

</style>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
 $(function(e){
$("form").on("input", "table input", function() {
var error_message = "Только цифры";
var pattern = /^\d+$/;
var num = this.value.trim();
var ok = pattern.test(num);
$(this).removeClass("ok err");
if(num) {
$(this).addClass(ok ? "ok" : "err");
}
var index = $("form table input").index(this);
$("form table .error_form").eq(index).html(ok || !num ? "" : error_message);
})

   });
</script>
</head>
<body>
<form method="POST" action="form.php">

<table border="0">
  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><input type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
  </tr>

  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><input type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
  </tr>

  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><input type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
  </tr>
<br>
</table>
  <input type="submit" value="Отправить">
</form>
 </body>
 </html>

Katy93 30.01.2020 10:56

Спасибо за помощь, а как проверить поля не только на цифры, а допустим на имя или email. Вот что у меня получилось, но я думаю это не совсем правильно.
<!DOCTYPE html>
<html>
<head><title>Test</title>
<style type="text/css">
.err{
  border-bottom: 2px solid #F90A0A;
}
.ok{
  border-bottom: 2px solid #34F458;
}

</style>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(function(e){
/***************************************************/
//Проверка на число
/***************************************************/
$("form").on("input", "table .age", function() {
var error_message = "Только цифры";
var pattern = /^\d+$/;
var num = this.value.trim();
var ok = pattern.test(num);
$(this).removeClass("ok err");
if(num) {
$(this).addClass(ok ? "ok" : "err");
}
var index = $("form table input").index(this);

$("form table .error_form").eq(index).html(ok || !num ? "" : error_message);
})
/***************************************************/
//Проверка на буквы
/***************************************************/
$("form").on("input", "table .name", function() {
var error_message = "Только буквы";
var pattern = /^[a-zA-Zа-яА-Я]*$/;
var num = this.value.trim();
var ok = pattern.test(num);
$(this).removeClass("ok err");
if(num) {
$(this).addClass(ok ? "ok" : "err");
}
var index = $("form table input").index(this);

$("form table .error_form").eq(index).html(ok || !num ? "" : error_message);
})
/***************************************************/
//Проверка на email адрес
/***************************************************/
$("form").on("input", "table .email", function() {
var error_message = "Только email";
var pattern = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var num = this.value.trim();
var ok = pattern.test(num);
$(this).removeClass("ok err");
if(num) {
$(this).addClass(ok ? "ok" : "err");
}
var index = $("form table input").index(this);

$("form table .error_form").eq(index).html(ok || !num ? "" : error_message);
})

   });
</script>
</head>
<body>
<form method="POST" action="form.php">

<table border="0">
  <tr>
    <td><input class="age" type="text" value="" name="mass[age][]"></td>
    <td><input class="name" type="text" value="" name="mass[exp][]"></td>
    <td><input class="email" type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
  </tr>

  <tr>
    <td><input class="age" type="text" value="" name="mass[age][]"></td>
    <td><input class="name" type="text" value="" name="mass[exp][]"></td>
    <td><input class="email" type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
  </tr>

  <tr>
    <td><input class="age" type="text" value="" name="mass[age][]"></td>
    <td><input class="name" type="text" value="" name="mass[exp][]"></td>
    <td><input class="email" type="text" value="" name="mass[gender][]"></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
  </tr>
<br>
</table>
  <input type="submit" value="Отправить">
</form>
 </body>
 </html>

рони 30.01.2020 17:12

Katy93,
$(function(){
$("form").on("input", "table input", function() {
var error_message = {"mass[age][]" : "Только цифры", "mass[exp][]" : "Только буквы", "mass[gender][]" : "Только email"}[this.name];
var pattern = {"mass[age][]" : /^\d+$/, "mass[exp][]" : /^[a-zA-Zа-яА-Я]*$/, "mass[gender][]" : /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/}[this.name];;
var num = this.value.trim();
var ok = pattern.test(num);
$(this).removeClass("ok err");
if(num) {
$(this).addClass(ok ? "ok" : "err");
}
var index = $("form table input").index(this);

$("form table .error_form").eq(index).html(ok || !num ? "" : error_message);
})
})

laimas 30.01.2020 17:13

Katy93, лучше так - поле формы определяет обязательно ли оно для заполнения и правила проверки, а скрипт занимается проверкой.

Malleys 30.01.2020 19:52

Цитата:

Сообщение от Katy93
как проверить поля не только на цифры, а допустим на имя или email.

Я не нашёл у вас проверку формы. Да, ваше регулярное выражение не учитывает, что есть имя «Фёдор», «Jürgen» и пр. Также не ясно, почему ваши сообщения об ошибке так далеко от проверяемого поля в разметке. (Это отменяет массу приятных вещей)

<!DOCTYPE html>
<html>
<head>
	<title>Form Validation</title>
	<style>
		.validable {
			border: 0 solid #888;
			border-bottom-width: 2px;
			padding: 0.5em;
			font: inherit;
 			outline: none;
		}
		.validable:not(:placeholder-shown):invalid {
			border-bottom-color: #f90a0a;
		}
		.validable:valid {
			border-bottom-color: #34f458;
		}
		.validable ~ .error {
			display: none;
		}
		.validable:not(:placeholder-shown):invalid ~ .error {
			display: block;
		}
		form td {
			vertical-align: top;
		}
	</style>
</head>
<body>
	<form method="POST" action="form.php">
	<table>
		<tr>
			<td>
				<input class="age validable" type="text" name="mass[age][]" placeholder="Возраст" pattern="\d{1,3}" required>
				<span class="error">Только цифры</span>
			</td>
			<td>
				<input class="name validable" type="text" name="mass[exp][]" placeholder="Имя" pattern="(?=\s*\S+)\D+" required>
				<span class="error">Только буквы</span>
			</td>
			<td>
				<input class="email validable" type="email" name="mass[gender][]" placeholder="Почта" required>
				<span class="error">Только email</span>
			</td>
		</tr>
	</table>
	<input type="submit" value="Отправить">
	</form>
</body>
</html>
Вы можете добавить динамически сколько угодно строк!

Katy93 31.01.2020 09:33

Malleys, я проверила и всё равно не могу понять как работает без js скриптов. Я например взяла и сделала дубли ячеек и протестировала ввела в каждое поле и ошибка появляется снизу над полем где я ввожу и это при том, что я не указывала уникальный идентификатор. Разве для ошибки и поля не нужен уникальный id?

Katy93 31.01.2020 09:39

А ещё появляется сообщение с указанием, что я не правильно ввела строку например "Адрес электронной почты должен содержать символ "@". В адресе "katerina" отсутствует символ "@"." Никакие js библиотеки я не подключала и дополнительные настройки в библиотеках я не делала.

Katy93 31.01.2020 09:42

Кстати, что это за символ такой "ü" как его на клавиатуре поставить?

Malleys 31.01.2020 11:21

Цитата:

Сообщение от Katy93
я проверила и всё равно не могу понять как работает без js скриптов.

Это встроенный в HTML5 функционал для проверки форм — Form Validation API. Т. е. для работы, проверки и отправки формы скрипт не обязателен.

Цитата:

Сообщение от Katy93
Разве для ошибки и поля не нужен уникальный id?

Нет. Для большинства простых случаев вам достаточно возможностей HTML5 и CSS. Для ошибки и поля не нужен уникальный id, если только вы не хотите обратиться к конкретным полям через скрипт.

Цитата:

Сообщение от Katy93
А ещё появляется сообщение с указанием, что я не правильно ввела строку например "Адрес электронной почты должен содержать символ "@". В адресе "katerina" отсутствует символ "@"." Никакие js библиотеки я не подключала и дополнительные настройки в библиотеках я не делала.

Да, всё верно, поскольку у поля ввода указан тип type="email" и указано, что это поля обязательно для заполнения (required), то именно так работает Form Validation API по умолчанию — он показывает, какие поля заполнены неправильно! Конечно же через скрипт вы можете настроить эти сообщения, или даже использовать свой способ оповещения об ошибках.

Цитата:

Сообщение от Katy93
Кстати, что это за символ такой "ü" как его на клавиатуре поставить?

Буква Ü — буква, которая используется в некоторых языках, например, в немецком, эстонском и пр. Когда у вас есть клавиатура с такой буквой и выбрана раскладка языка, где есть такая буква, то вы сможете её напечатать, нажав на соответствующую клавишу! (Также на MacOS при английской раскладке вы можете нажать Option+U, а затем U, чтобы ввести ü)

рони 31.01.2020 11:36

Цитата:

Сообщение от Katy93
"ü" как его на клавиатуре поставить?

переключится на английский, включить Num Lock, зажать Alt, набрать 0252 на числовой панели.

Katy93 01.02.2020 09:06

Спасибо, что объяснили. Я всё же решила всё таки воспользоваться только проверки с цифрами:
<!DOCTYPE html>
<html>
<head><title>Test</title>
<style type="text/css">
.err{
  border-bottom: 2px solid #F90A0A;
}
.ok{
  border-bottom: 2px solid #34F458;
}

</style>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
 $(function(e){
$("form").on("input", "table input", function() {
var error_message = "Только цифры";
var pattern = /^\d+$/;
var num = this.value.trim();
var ok = pattern.test(num);
$(this).removeClass("ok err");
if(num) {
$(this).addClass(ok ? "ok" : "err");
}
var index = $("form table input").index(this);
$("form table .error_form").eq(index).html(ok || !num ? "" : error_message);
})

   });
</script>
</head>
<body>
<form method="POST" action="form.php">

<table border="0">
  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><select id="gender1" name="driver[gender][]">
           <option label="-"></option>
           <option value="1">Мужской</option>
           <option value="0">Женский</option>
       </select></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td></td>
  </tr>

  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><select id="gender1" name="driver[gender][]">
           <option label="-"></option>
           <option value="1">Мужской</option>
           <option value="0">Женский</option>
       </select></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td></td>
  </tr>

  <tr>
    <td><input type="text" value="" name="mass[age][]"></td>
    <td><input type="text" value="" name="mass[exp][]"></td>
    <td><select id="gender1" name="driver[gender][]">
           <option label="-"></option>
           <option value="1">Мужской</option>
           <option value="0">Женский</option>
       </select></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td></td>
  </tr>
<br>
</table>
  <input type="submit" value="Отправить">
</form>
 </body>
 </html>

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

Например он создал несколько динамических полей и не заполнил их потом нажимает submit и ему выдаёт сообщение под каждым полем красным "Только цифры". И тут выбор у пользователя либо удалить лишнее либо заполнить их.

рони 01.02.2020 11:27

Katy93,
может проще required добавить в input?

Katy93 01.02.2020 12:13

Как пример ранее, со стилями? HTML 5 и CSS

рони 01.02.2020 12:15

Katy93,
<td><input type="text" value="" name="mass[age][]" required ></td>

Katy93 01.02.2020 14:09

Проверила скрипт:
<!DOCTYPE html>
<html>
<head><title>Test</title>
<style type="text/css">
.err{
  border-bottom: 2px solid #F90A0A;
}
.ok{
  border-bottom: 2px solid #34F458;
}

</style>

</head>
<body>
<form method="POST" action="form.php">

<table border="0">
  <tr>
    <td><input type="text" value="" name="mass[age][]" pattern="\d{1,3}" required></td>
    <td><input type="text" value="" name="mass[exp][]" pattern="\d{1,3}" required></td>
    <td><select id="gender1" name="driver[gender][]">
           <option label="-"></option>
           <option value="1">Мужской</option>
           <option value="0">Женский</option>
       </select></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td></td>
  </tr>

  <tr>
    <td><input type="text" value="" name="mass[age][]" pattern="\d{1,3}" required></td>
    <td><input type="text" value="" name="mass[exp][]" pattern="\d{1,3}" required></td>
    <td><select id="gender1" name="driver[gender][]">
           <option label="-"></option>
           <option value="1">Мужской</option>
           <option value="0">Женский</option>
       </select></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td></td>
  </tr>

  <tr>
    <td><input type="text" value="" name="mass[age][]" pattern="\d{1,3}" required></td>
    <td><input type="text" value="" name="mass[exp][]" pattern="\d{1,3}" required></td>
    <td><select id="gender1" name="driver[gender][]">
           <option label="-"></option>
           <option value="1">Мужской</option>
           <option value="0">Женский</option>
       </select></td>
  </tr>
  <tr>
    <td><span class="error_form" ></span></td>
    <td><span class="error_form" ></span></td>
    <td></td>
  </tr>
<br>
</table>
  <input type="submit" value="Отправить">
</form>
 </body>
 </html>

К сожалению не подходит дело в том что эта проверка работает только в том случае если нажата кнопка submit. А у меня до этой кнопки нужно ещё добраться. Дело в том что у меня постраничная форма, в начале большая часть скрыта стилями display: none;, при нажатии кнопки далее открывается новая часть формы $("#second").show();, а старая закрывается $("#first").hide();.

Вообщем использовать html5 валидацию тут не получится.

laimas 01.02.2020 16:23

Сценарий, это:

1) разбудили проверить поля
2) проверяет поля:
-если поле имеет атрибут required, то обязателен для заполнения
-если имеет pattern, то проверяется по этому шаблону, иначе по типу поля
-если поле не обязательно для заполнения, но заполнено, то проверяется по типу поля, но могут быть и пользовательские определения
-сообщения об ошибках извлекаются из data атрибутов
3) сделал работу и спать

Это в конкретном сценарии можно шаблоны определять, какие-то сообщения, а в вашем случае так поступать, это вырастить монстра.

Katy93 01.02.2020 17:50

В каком моём случае, я что-то не совсем поняла?

laimas 01.02.2020 18:06

Цитата:

Сообщение от Katy93
В каком моём случае, я что-то не совсем поняла

В вашем случае html5 валидация так и останется и будет нужна при отправлении формы, а пользовательская проверка инициализироваться по смене элементов формы. Для скрипта атрибуты их, это есть и правила, и данные. То есть, если вот так подходить:

var error_message = "Только цифры";
var pattern = /^\d+$/;


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

И либо this.value.... либо сразу $(this), коли большую часть вы выполняете на JQ, и $(this).val(), с установкой $.valHooks, чтобы при проверке значения уже были очищены от крайних пробелов.

Katy93 01.02.2020 20:00

И как же мне html 5 валидацию применить если она привязана только к submit, а submit доступно только будет на следующем этапе. Т.е. после нажатия кнопки "Следующая" или мне из этой кнопки (следующая) сделать submit, тогда получится несколько submit в одной форме.

laimas 02.02.2020 05:51

В общем-то существуют и такие сценарии, когда сервер принимает данные порциями. Нет, нативная проверка полей будет при отправлении, но ведь кроме этого будут работать и css определения для полей. Хотя можно и отказаться от них, и сделать посредством метки к полю и ее :before, :after добавить иконки на поле слева, флажков справа при выполнении условий ввода, и прочих красивостей.

А пользовательская "до", что там у вас кнопка определенного этапа, вот она и должна запускать функцию проверки. А функция, по сути, простая как валенок - ее аргумент, это произвольное количество полей (или указание где их получить), которые она обходит в цикле и выполняет то о чем писалось выше. Завтра вам нужна будет другая форма, а функцию проверки при этом изменять не придется.

рони 02.02.2020 08:29

Katy93,
форма пошаговая обязательные поля

Katy93 03.02.2020 09:26

Я нашла решение с помощью библиотеки jquery.validate.min.js. Мой код можно посмотреть по этой ссылке. https://codepen.io/Smith37/pen/qBEeRer

Katy93 03.02.2020 09:29

Проверку с помощью регулярных выражений например на цифры, позже решу этот вопрос.

рони 03.02.2020 09:42

Цитата:

Сообщение от Katy93
Проверку с помощью регулярных выражений например на цифры,

Цитата:

Сообщение от Katy93
решение с помощью библиотеки jquery.validate.min.js.

примеры добавления своих методов валидации в плагин validate по ссылке ниже
validate последовательное заполнение формы

laimas 03.02.2020 15:22

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

Malleys 04.02.2020 12:28

Цитата:

Сообщение от laimas
Нет, нативная проверка полей будет при отправлении

reportValidity?

Цитата:

Сообщение от Katy93
Проверку с помощью регулярных выражений например на цифры, позже решу этот вопрос.

атрибут pattern? Или type="number"?

Katy93 05.02.2020 10:44

Почему placeholder установленный на дате с помощью маски js постоянно дублируется до бесконечности?
Скриншот:

Код:
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
<script src="jquery.maskedinput.js"></script>
<style>
   #date {
    width: 500px; /* Ширина поля в пикселах */
   } 
  </style>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(e){
 
   $("#Phone").mask("(999) 999-9999");
   $("#date").mask("99.99.9999",{placeholder:"дд.мм.гггг"});
});
</script>
<form id="cmaForm" action="" method="post">
<p><label>Phone Number:</label><input name="Phone" id="Phone" class="pageRequired" maxlength="254" 
title="Номер телефона"></p>
<p><label>Date:</label>
    <input type="text" name="date" id="date" class="sum pageRequired" title="Дата"></p>
<input type="submit" class="submitbutton" value="Submit">
</form>
</html>
</body>

рони 05.02.2020 11:35

Цитата:

Сообщение от Katy93
постоянно дублируется до бесконечности?

:-?
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script>
<style>
   #date {
    width: 500px; /* Ширина поля в пикселах */
   }
  </style>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(e){

   $("#Phone").mask("(999) 999-9999");
   $("#date").mask("99.99.9999",{placeholder:"дд.мм.гггг"});
});
</script>
<form id="cmaForm" action="" method="post">
<p><label>Phone Number:</label><input name="Phone" id="Phone" class="pageRequired" maxlength="254"
title="Номер телефона"></p>
<p><label>Date:</label>
    <input type="text" name="date" id="date" class="sum pageRequired" title="Дата"></p>
<input type="submit" class="submitbutton" value="Submit">
</form>
</body>
</html>

Katy93 05.02.2020 12:24

С библиотекой, что-то не так подключила вашу версию.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script>

Всё заработало.

Katy93 05.02.2020 15:41

Кажется получилось сделать валидацию к постраничной форме. Только вот у меня проблема с датой. Никак не получается составить регулярное выражение такого формата дд.мм.гггг. Как сделать проверку на вводимую дату?
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
</script>
  <style type="text/css">
  #step2,#step3,#step4,#step5{
        display: none;
       }

  </style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://jqueryvalidation.org/files/dist/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script>

  <script>
$.validator.addMethod("minlenghtname", function (value, element) {
        return /^[a-zа-я]+$/i.test(value);
    }," не соответствует формату");

$.validator.addMethod("requiredname", function (value, element) {
        return value.length > 2;
    }," Заполните это поле!!!");
$.validator.addMethod("requirednum", function (value, element) {
        return /^\d+$/i.test(value);
    }," только числа");
$.validator.addMethod("requiredemail", function (value, element) {
        return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/i.test(value);
    }," Неправильный email");
$.validator.addMethod("checkMask", function(value, element) {
     return /\+\d{1}\(\d{3}\)\d{3}-\d{4}/g.test(value); 
},"Не верный формат телефона (+7(999)999-9999)");
$.validator.addMethod("checkData", function(value, element) {
     return value.match(/^\d\d?\.\d\d?\.\d\d\d\d$/);
},"Please enter a date in the format dd.mm.yyyy.");
    


$(function () {
$("#Phone").mask("+7(999)999-9999");
$("#date").mask("99.99.9999",{placeholder:"dd.mm.yyyy"});

 var v = $("#commentForm").validate({
        rules: {
            fname: {
                requiredname: true,
                minlenghtname: true
            },
            lname: {
                requiredname: true,
                minlenghtname: true
            },
            num1:{
                requirednum:true
            },
            num2: {
                requirednum:true
            },
            city: {
               minlenghtname: true
            },
            country:{
               minlenghtname: true
            },
            email:{
               requiredemail: true
            },
            Phone:{
              checkMask: true
            },
            date:{
              checkData: true
            }
        },
        submitHandler: function() {
                alert("Submitted, thanks!");
            }
        
    })
    
    $(".next1").click(function() {
            if (v.form()) {
                $("#step2").show();
                $("#step1").hide();
                 $("#progressText").html("Шаг 2 из 4");
                
            }
      });
     $(".next2").click(function() {
            if (v.form()) {
                $("#step3").show();
                $("#step2").hide();
                $("#progressText").html("Шаг 3 из 4");
            }
        });
     $(".next3").click(function() {
            if (v.form()) {
                $("#step4").show();
                $("#step3").hide();
                $("#progressText").html("Шаг 4 из 4");
                
            }
        });
});
  </script>
</head>
<body>
<div id="progressText">Шаг 1 из 4</div>
<form class="cmxform" id="commentForm" method="get" action="">
<ul id="stepForm">
<li id="step1">
       <p><label>Имя:</label><input class="left" id="fname" name="fname"></p>
        <p><label>Фамилия:</label><input class="left" id="lname" name="lname"></p>
        <p class="buttonWrapper">
        <input name="formNext1" type="button" class="next1 nextbutton" value="Next" alt="Next" title="Next">
            </p>
  </li>
  <li id="step2">
  <p><label>Номер 1:</label><input class="left" id="num1" name="num1" maxlength="11"></p>
        <p><label>Номер 2:</label><input class="left" id="num2" name="num2" maxlength="16" ></p>
  <p class="buttonWrapper">
        <input name="formNext1" type="button" class="next2 nextbutton" value="Next" alt="Next" title="Next">
            </p>
  </li>
  <li id="step3">
  <p><label>Город:</label><input class="left" id="city" name="city"></p>
        <p><label>Страна:</label><input class="left" id="country" name="country"></p>
        <input name="formNext1" type="button" class="next3 nextbutton" value="Next" alt="Next" title="Next">
  </li>
   <li id="step4">
      <p><label>Email адрес:</label><input name="email" id="email" class="email" title="Неправильный email"></p>
      <p><label>Номер телефона:</label><input name="Phone" id="Phone" class="phone" maxlength="254" title="Введите телефон"></p>
      <p><label>Дата:</label>
          <input type="text" name="date" id="date" class="date" title="Введите дату"></p>
      <input type="submit" class="submitbutton" value="Submit">
   </li>

</ul>
</form>
</center>

</body>
</html>

рони 05.02.2020 15:49

Цитата:

Сообщение от Katy93
регулярное выражение такого формата дд.мм.гггг

https://stackoverflow.com/questions/...mat-dd-mm-yyyy

Katy93 06.02.2020 11:29

Получилось но не совсем так как я хотела.
Ввожу я дату например 06.02.2020, так работает. Потом пытаюсь ввести 30.02.2020 пишет "введите дату". Тогда я начинаю проверять разные числа первое число если ввожу 01-12 ошибка исчезает во втором числе допустимо от 01 до 31. Вообщем я так поняла что вместо даты которую я хотела dd.mm.yyyy получилось вот такая mm.dd.yyyy. т.е первый месяц, потом число потом год. Как это исправить, чтобы первое было число потом месяц, год.
$.validator.addMethod("checkData", function(value, element) 
{
    return /^\d{1,2}\.\d{1,2}\.\d{4}$/i.test(value);
},"Введите дату.");


....
$("#Phone").mask("+7(999)999-9999");
$("#date").mask("99.99.9999",{placeholder:"dd.mm.yyyy"});
....


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