상세 컨텐츠

본문 제목

JavaScript - 폼 데이터 체크 후 서브밋 하기(onsubmit)

개발/JavaScript

by 뉴에이스 2020. 6. 4. 10:49

본문

onsubmit : submit 이벤트가 발생했을때 체크 (서버로 전송 전에 데이터 체크)
            값이 올바른 경우에는 전송, 값이 올바르지 않은 경우에는 취소
            onsubmit="return false" - 결과가 false라면 전송하지 않음

 

소스

 

<body>
<form name="mForm" action="a.html" onsubmit="return doAction();">
	id: <input type="text" name="id" /><br />
	pass: <input type="password" name="pass" /><br />
	pass 확인: <input type="password" name="pass2" /><br />
	<button>확인</button>
	<!-- type을 button으로 설정하면, 기본으로 submit이 되지 않는다 (사용자 정의 동작)-->
	<button type="button" onclick="doAction2();">확인2</button>
</form>

<script>
	// 특정 엘리먼트의 값이 비어있는지 확인 후 값이 없으면 true, 아니면 false를 반환

	function isEmpty(obj, msg) {
		// obj가 문자열이라면 문자열에 해당하는 엘리먼트에 접근
		if (typeof obj == "string") {
			obj = document.querySelector("#" + obj);
		}
		if (obj.value == "") {
			alert(msg);
			obj.focus();
			return true;
		}
		return false;
	}

	function doAction() {
		// 입력값이 잘못된 경우 false를 리턴

		/* 하나씩 접근할 경우 ..
		document.querySelector("input[name='id']");
		document.querySelector("input[name='pass']");
		document.querySelector("input[name='pass2']");
		*/

		// form name으로 바로 접근 - form 안에서 id 이름을 가진 엘리먼트에 접근
		//var idEle = document.mForm.id;
		var f = document.mForm; // f는 mForm을 가르킴

		if (isEmpty(f.id, "아이디를 입력하세요!")) return false;
		if (isEmpty(f.pass, "패스워드를 입력하세요!")) return false;
		if (isEmpty(f.pass2, "패스워드 확인을 입력하세요!")) return false;

		if (f.pass.value != f.pass2.value) {
			// 입력값이 다를 경우 포커스는 첫번째 칸으로
			f.pass.focus();
			// 첫번째 칸에 벨류를 선택상태로
			f.pass.select();
			// 두번째 칸은 값을 지운다.
			f.pass2.value = "";
			alert("패스워드가 서로 다릅니다.");
			return false;
		}
		return true;
	}

	function doAction2() {
		alert("확인2 눌렀음...");

		var f = document.mForm;
		if (isEmpty(f.id, "아이디를 입력하세요!")) return;
		if (isEmpty(f.pass, "패스워드를 입력하세요!")) return;
		if (isEmpty(f.pass2, "패스워드 확인을 입력하세요!")) return;

		if (f.pass.value != f.pass2.value) {
			// 입력값이 다를 경우 포커스는 첫번째 칸으로
			f.pass.focus();
			// 첫번째 칸에 벨류를 선택상태로
			f.pass.select();
			// 두번째 칸은 값을 지운다.
			f.pass2.value = "";
			alert("패스워드가 서로 다릅니다.");
			return false;
		}

		// 모든 입력값이 올바를때, 폼의 데이터를 서버로 전송 (submit)

		// 기본 form 액션에 설정된 페이지가 아닌 다른 페이지로 변경할 때
		f.action = "bbb.html";
		// 폼을 서브밋 한다.
		f.submit();
	}
</script>
</body>

 

결과 (action 설정한 페이지는 없으므로 서브밋 성공시 에러 페이지가 뜨는것은 정상!)

 

관련글 더보기

댓글 영역