Hyubert
@Hyubert
JS

Почему не работает код проверки форм?

В js новичок, написал код, которий не работае(да знаю что руки из одного места), видает ошибку TypeError: pattern.test is not a function(…), как исправить не знаю, помогите пожалуйста.

Суть кода в проверки значения инпута при собитии keydown, то есть многовено

var input = document.getElementsByClassName('validate');


function validateMail(el, pattern) {
	return pattern.test(el);
};

function check(el, pattern) { 

		el.onkeydown = function () {
			if( el.value !== '' ) {
				if(pattern) {
					el.classList.remove('error');
					el.classList.add('ok');
				} else {
					el.classList.remove('ok');
					el.classList.add('error');
				};
			}
		};
	
};

for (var i = 0; i < input.length; i++) {
	check(input[i], validateMail(input[i], input[i].getAttribute('pattern')));
};

<form action="POST" class="form">
					<input class="validate mail" type="email" placeholder="Ваш e-mail..." pattern="1">
					<input class="validate name" type="text" placeholder="Ваше имя..." pattern="^\d{5,6}(?:[-\s]\d{4})?$">
					<input class="validate pass" type="password" placeholder="Ваш пароль..." pattern="^\d{5,6}(?:[-\s]\d{4})?$">
					<input class="validate phone" type="tel" placeholder="Ваш телефон..." pattern="^\d{5,6}(?:[-\s]\d{4})?$">
					<span>Получить код</span>
					<input class="key" type="text" placeholder="Ваш код подтверждения...">
					<span>Подтвердить</span>
					<input class="next_step" type="submit" value="Продолжить" disabled>
				</form>
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
DirecTwiX
@DirecTwiX
"display: flex;" уже предлагали?
return pattern.test(el);
=>
return RegExp(pattern).test(el.value);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dontbrain
Строка input[i].getAttribute('pattern') возвращает строку, а не регулярное выражение. У строки нет метода test.
Используй метод match
И input[i] это html элемент, а не строка. HTMLCollection
function validateMail(el, pattern) {
  return el.value.match(pattern);
};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы