Как удалить класс после обнуления инпута JS
Делаю форму для кредитной карты. Библиотека payment определяет банк по номеру карты, подключаю картинки. Хочу навесить соответствующий бэкграунд, по дефолту серый цвет у карты. Как удалить бэкграунд, если инпут после ввода цифр очистить? Сейчас этот класс остается и меняется если только ввести номер карты другого банка.
cardNumber.addEventListener('blur', (e) => {
if (e.target.value.trim() === '') return;
const nameByNumber = getCreditCardNameByNumber(e.target.value);
if (nameByNumber === 'Credit card is invalid!') {
cardNumber.classList.add('not-valid');
cardNumber.classList.remove('is-valid');
logoCard.src = '';
} else if (nameByNumber === 'Visa') {
cardNumber.classList.remove('not-valid');
cardNumber.classList.add('is-valid');
card.classList.add('visa'); // добавляю новый класс с другим бэкграундом
logoCard.src = Visa;
} else if (nameByNumber === 'MasterCard') {
cardNumber.classList.remove('not-valid');
cardNumber.classList.add('is-valid');
card.classList.add('mastercard');
logoCard.src = MasterCard;
} else if (nameByNumber === 'Maestro') {
cardNumber.classList.remove('not-valid');
cardNumber.classList.add('is-valid');
card.classList.add('maestro');
logoCard.src = Maestro;
} else {
alert('Ваша карта не поддерживается');
cardNumber.classList.add('is-valid');
}
// eslint-disable-next-line no-use-before-define
checkValid();
});
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Если надо при пустом вводе удалять нужный класс, то можно просто это обрабатывать в вашем первом if заменив его вот так
cardNumber.addEventListener('blur', (e) => {
if (!e.target.value.trim()) {
// Или другой нужный вам класс
cardNumber.classList.remove('is-valid');
logoCard.src = ''
return;
};
// Остальной ваш код
}
Так же можно вписать эти проверки в общий код и убрать дублирование кода
cardNumber.addEventListener('blur', (e) => {
function setValid(name, logo) {
cardNumber.classList.remove('not-valid');
cardNumber.classList.add('is-valid');
card.classList.add(name); // добавляю новый класс с другим бэкграундом
logoCard.src = logo;
}
const cardValue = e.target.value.trim();
// Если будет пустой ввод, то подставится значение 1
// В таком случае если поле пустое, то будет показано как невалидное
switch (getCreditCardNameByNumber(cardValue ? cardValue : '1')) {
case 'Credit card is invalid!':
cardNumber.classList.add('not-valid');
cardNumber.classList.remove('is-valid');
logoCard.src = '';
break;
case 'Visa':
setValid('visa', Visa);
break;
case 'Mastercard':
setValid('mastercard', MasterCard);
break;
case 'Maestro':
setValid('maestro', Maestro);
break;
default:
alert('Ваша карта не поддерживается');
cardNumber.classList.add('is-valid');
}
checkValid();
});
Так же можно вынести ряд параметров в справочник
const cardsName = {
Visa: {
name: 'visa',
logo: Visa
},
Mastercard: {
name: 'mastercard',
logo: Mastercard
},
Maestro: {
name: 'maestro',
logo: Maestro
},
}
cardNumber.addEventListener('blur', (e) => {
const cardValue = e.target.value.trim();
// Эту подстановку можно заменить проверкой из первого примера
const cardName = getCreditCardNameByNumber(cardValue ? cardValue : '1')
switch (cardName) {
case 'Credit card is invalid!':
cardNumber.classList.add('not-valid');
cardNumber.classList.remove('is-valid');
logoCard.src = '';
break;
case 'Visa':
case 'Mastercard':
case 'Maestro':
cardNumber.classList.remove('not-valid');
cardNumber.classList.add('is-valid');
card.classList.add(cardsName[cardName].name);
logoCard.src = cardsName[cardName].logo;
break;
default:
alert('Ваша карта не поддерживается');
cardNumber.classList.add('is-valid');
}
checkValid();
});