Wpis z mikrobloga

Czemu mój gownokod nie działa? Chcę mieć 2 listenery na Submit, a jak jeden mam to drugi nie działa.

const btn = document.querySelector('.btn');

btn.addEventListener('click', (e) => {
e.preventDefault();
console.log('click');
//document.querySelector('body').classList.add('bg-dark');
})

const myForm = document.querySelector('#my-form');
const nameInput = document.querySelector('#name');
const emailInput = document.querySelector('#email');
const msg = document.querySelector('.msg');
const userList = document.querySelector('#users');

myForm.addEventListener('submit', onSubmit);

function onSubmit(e) {
e.preventDefault();

console.log('why this msg is never printed, frens?!');

if(nameInput.value === '' || emailInput.value === '') {
msg.classList.add('error');
msg.innerHTML = 'Please enter all fields';
console.log('hereeee')

setTimeout(() => msg.remove(), 3000);
} else {
const li = document.createElement('li');

li.appendChild(document.createTextNode(${nameInput.value}: ${emailInput.value}));

userList.appendChild(li);

nameInput.value = '';
emailInput.value = '';
}
}
#programowanie @vito199 #javascript
  • 37
@programista4k: Bo javascriptowej konwencji ten typ służy przede wszystkim do przypisywania obiektów, najczęściej z zewnętrznych bibliotek. Dla większości primitive types nie ma on sensu, będziesz potem chciał wykonać jakąś operację na tej zmiennej i zdziwisz się jak wywali ci error. Używaj var, albo jeszcze lepiej let,
@programista4k:

@salamander-kwarcowy: no to nie bede jej zmienial tylko utworzę nową, zgodnie z paradygmatem funkcyjnym

Zdecydowanie kontynuuj z taką praktyką, Lepiej dostać błąd (polecam TS i błędy compile-time), niż potem siedzieć z debuggerem przez pół godziny badając kolejne stany aplikacji.

onClick jest wywoływany przed onSubmit, a jako że w listenerze dla onClick masz 'preventDefault' które blokuje domyślne działanie, w tym wykonanie onSubmit (niestety kolejność eventów jest zależna od przeglądarki, ale