태그 안의 submit
<input type="submit" />
<button type="submit"></button>
→ submit 이라 지정하지 않아도 button은 기본적으로 submit 이다.
스크립트 submit
document.querySelector('폼-id').addEventListener('submit', callback);
⚠️ addEventListener의 submit 이벤트를 지정할 때
1. 버블링을 이용한 상위 태그에 지정하거나
document.querySelector('폼 상위(부모)태그-id')
2. 해당 form 태그 요소에 이벤트를 지정한다.
document.querySelector('폼-id')
이유 : 이벤트 핸들러의 submit 이 발생하면 클릭한 버튼이 아닌 form 태그가 실행되기 때문이다. ★★★
⚠️ 버튼에 submit 이벤트 지정 X
버튼에 지정하여도 submit은 form태그에 대한 이벤트로 발생
버튼에 지정해야 한다면 click 이벤트로 변경
document.querySelector('버튼-id').addEventListener('submit', callback);
(X)
document.querySelector('버튼-id').addEventListener('click', callback);
(O)
⚠️ submit으로 인한 새로고침을 막는 방법
submit이후 양식을 제출하면 새로고침
이 발생하는데, 새로고침
이 발생하는 이유는 form 태그의 submit 액션이 수행되었기 때문이다.
(헷갈리는 점은 button의 submit이 있다고 해도 form이 없고, form 태그 안에 버튼이 위치하지 않으면 양식이 제출되지 않는다. 즉 새로고침이 발생하지 않음)
새로고침을 막기위해서는 이벤트 핸들러 함수 submit 에 preventDefault()
함수를 호출해주면 된다.
(버튼에 이벤트 핸들러 함수를 적용하면 안된다. form 요소에 이벤트 핸들러 함수를 적용해야 동작한다.)