@SHNM

Почему данный код работает не правильно?

Здравствуйте! Хочу сделать валидацию, то бишь, если все поля заполнены делать кнопку активной
Вот код
$('form').find('input').each(function () { 
 $($(this)).on('input', function () { 
 if ($(this).val().length == 0) { 
 $('.button').attr('disabled', true); 
 } 
 else { 
 $('.button').attr('disabled', false); 
 } 
 }) 
 })

Странно, он работает таким образом: если я заполню одно поле, то кнопка станет активной, а нужно, чтобы если все поля заполнены, то делать кнопку активной, что не так тут?))
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Причина номер раз: потому что автор кода говнокодер. Ну, то есть - вы даже отформатировать код не удосужились. Причина номер два: проверяется состояние только одного инпута, того, где случилось событие. А надо проверять все.

Исправляем:

$('form').on('input', function() {
  $('.button').prop('disabled', $('input', this).get().some(n => !n.value));
}).trigger('input');

// или

const form = document.querySelector('form');
const button = document.querySelector('.button');
const inputs = [...form.querySelectorAll('input')];
form.addEventListener('input', () => button.disabled = !inputs.every(n => n.value));
form.dispatchEvent(new Event('input'));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы