우편검색 버튼을 누르면 주소를 검색할 수 있는 팝업창이 뜨고,

주소를 선택하면 주소 폼에 자동으로 주소가 입력된다.

 

 

주소 검색 기능을 직접 구현하려면 매우 힘들지만

기존 포털 사이트에서 서비스 중인 기능을 빌려온다.

 

 

 

 

body 영역에 작성한 입력양식

 

<form>
우편번호:<input type=text size=5 maxlength=5 id="join_zip1">		
<input type=button value="우편검색" onClick="openDaumPostcode()"><br>
주소:<input type=text size=60 id="join_addr1">
</form>

 

우편검색 버튼을 클릭하면 openDaumPostcode()함수를 실행하도록 되어 있는데,

head영역에 작성된 해당 함수이다.

 

<script>
	function post(){
	  window.open("","post",
		   	      "width=200,height=300,scrollbars=yes");
	}
</script>
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script>
	function openDaumPostcode() {
		new daum.Postcode({
			oncomplete : function(data) {
				/* 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
				 우편번호와 주소 정보를 해당 필드에 넣고, 커서를 상세주소 필드로 이동한다.*/
				document.getElementById('join_zip1').value = data.zonecode;
				document.getElementById('join_addr1').value = data.address;
				
			}
		}).open();
	}
</script>

 

data라는 매개변수를 통해 팝업창에서 선택된 주소의 정보를

부모창의 우편번호와 주소 폼에 그대로 가져온다.

 

1. 로그인 (유효성 검증, 파일 분리)

 

 

 

입력 양식 - 로그인 폼

입력 양식, 폼 태그, 폼 객체 사용자에게 정보를 입력받는 요소 사용자에게 입력받은 데이터를 전달하는 방식에는 GET, POST 두 가지가 있는데, 주소를 변경하지 않고 보안을 유지하며 데이터를

kiwikiwisae.tistory.com

 

 

 

 

이전에 생성한 로그인 폼에 자바스크립트의 기능을 추가하기 두 가지를 수정하여 아래 코드로 진행을 한다.

 

 

 

- 유효성 검증 required 은 자바스크립트 기능으로 구현할 예정이기 때문에 삭제

- 아이디와 비밀번호 폼에 각각 name, id값을 추가 (id, passwd)

 

 

 

<form method="post" action="login.jsp">

<table align=center>
	<caption>로그인</caption>
	<tr>
		<td align=center>ID</td>
		<td>
			<input type= size=20 maxlength=10 autofocus="autofocus"
           		 name="id" passwd="id">
		</td>
	</tr>
	<tr>
		<td align=center>PW</td>
		<td>
			<input type="password" size=20 name="passwd" id="passwd">
		</td>
	</tr>
	<tr><td><br></tr>
	<tr>
		<td colspan=2 align=center>
			<input type="submit" value="로그인">
			<input type="reset" value="취소">
		</td>
	</tr>
</table>

</form>

 

 

기존에 require 태그로 유효성 검증을 해서

ID와 PW 폼에 값을 입력하지 않으면 안되도록 했지만,

이번엔 자바스크립트로 기능을 추가한다.

 

head 영역에 유효성 검증을 위한 함수를 작성한다.

 

<head>
<script>
	function check() {
		var id = document.getElementById("id");
		var passwd = document.getElementById("passwd");
		
		if(id.value == "") {
			alert("ID를 입력하세요");
			id.focus();
			return false;
		}
        
		if(passwd.value == "") {
			alert("비밀번호를 입력하세요");
			passwd.focus();
			return false;
		}
	}
</script>
</head>

 

 

 

 

 

이렇게 유효성 검증 함수와 입력 양식을 한 파일에 작성해도 상관없지만,

유효성 검증 함수를 다른 파일로 분리해보았다.

 

 

 

login.js를 생성, head의 유효성 검증 함수인 check() 부분만 저장한다.

이 때, js파일에는 오로지 함수만 저장해야 한다.

그리고 check()가 빠진 부분에는 login.js파일을 불러오는 코드를 작성한다.

 

이 때, 다음 코드를 그대로 사용하기 위해서는 로그인폼 파일과 login.js파일은 같은 폴더에 위치해야 한다.

 

<script src="login.js"> </script>

 

 

 

 

 

 

 

 

 

2. 게시판 (유효성 검증, 파일 분리)

 

 

입력 양식 - 게시판

1. 가장 상단에 폼 태그를 입력하고 값을 전달할 방식, 페이지가 넘어갔을때 출력할 파일명을 지정한다. 내용 2. 이제 폼 태그 사이의 내용을 입력해본다. 레이아웃을 쉽게 제어하기 위해 테이블

kiwikiwisae.tistory.com

 

 

 

작성자, 비밀번호, 제목, 내용 중 하나라도 입력을 하지 않으면

작성 버튼을 눌렀을 때 경고창이 뜨면서 커서가 해당 창에 있도록 하는 기능을 자바스크립트로 추가해본다.

 

 

* 폼에 대한 기능을 모두 작성하고 실행하는 것보다는

하나 완성 할 때마다 실행해보고 또 다른 것을 작업하는 것이 에러 발견하기에 용이하다.

 

 

 

 

 

html로 작성한 기존 코드 (body 영역에 작성했음)

 

<table border=1 width=500 align=center>
	<caption>게 시 판</caption>
	
	<tr>
		<th>작성자</th>
		<td><input type="text" size=20 name="writer" id="writer" placeholder="작성자명 입력"> </td>
	</tr>
	
	<tr>
		<th>비밀번호</th>
		<td><input type="password" size=20 name="passwd" id="passwd" 
        		placeholder="2~8자 이내 입력"></td>
	</tr>
	
	<tr>
		<th>제목</th>
		<td><input type="text" size=50 name="subject" id="subject" 
        		placeholder="제목을 입력하세요"></td>
	</tr>
	
	<tr>
		<th>내용</th>
		<td><textarea rows="5" cols="50"
				name="content" id="content" 
                        placeholder="내용을 입력하세요"></textarea></td>
	</tr>
	
	<tr>
		<th>파일첨부</th>
		<td><input type="file" name="myfile" id="myfile"></td>
	</tr>
	
	<tr>
		<td colspan=2 align=center>
			<input type="submit" value="작성">
			<input type="reset" value="취소">
		</td>
	</tr>
	
</table>

 

 

 

 

폼 태그 안에 onSubmit 이벤트를 추가한다.

 

<form method="post" action="board.jsp" onSubmit="return check()">

 

 

 

 

head 영역에 유효성 검증을 위한 함수를 작성한다.

 

 - 작성자, 비밀번호, 제목, 내용 넷 중 하나라도 공란인 상태로 작성 버튼을 누를 경우 경고창 띄움

 - 비밀번호는 2~8자 길이를 지켜야 하고 그러지 않았을 때에는 경고창을 띄우고 초기화

 - 제목은 50자 이하로 입력해야 하고 그러지 않았을 때에는 경고창을 띄우고 초기화

 - 내용은 200자 이하로 입력해야 하고 그러지 않았을 때에는 경고창을 띄운다.

 

	function check() {
		var writer = document.getElementById("writer");
		var passwd = document.getElementById("passwd");
		var subject = document.getElementById("subject");
		var content = document.getElementById("content");
		
		if (writer.value == "") {
			alert("작성자를 입력하세요.");
			writer.focus();
			return false;
		}
		
		if (passwd.value == "") {
			alert("비밀번호를 입력하세요.");
			passwd.focus();
			return false;
		}

		if (passwd.value.length < 2 || passwd.value.length > 8  ) {
			alert("2~8자 길이로 입력하세요.");
			passwd.value = "";	// 입력한 비번 초기화
			passwd.focus();
			return false;
		} 

		if (subject.value == "") {
			alert("제목을 입력하세요.");
			subject.focus();
			return false;
		}
			
		if (subject.value.length > 50 ) {
			alert("제목을 50자 미만 길이로 입력하세요")
			subject.value = "";
			subject.focus();
			return false;
		}
		
		if (content.value == "") {
			alert("내용을 입력하세요.");
			content.focus();
			return false;
		}
		
		if (content.value.length > 200) {
			alert("내용을 200자 미만 길이로 입력하세요");
			content.focus();
			return false;
		}
	}

 

 

 

로그인과 마찬가지로 board.js 파일을 생성,

유효성 검증을 위해 작성한 check() 함수 부분만 빼내 board.js 파일에 저장한다.

 

그리고 check()가 빠진 부분에는 board.js파일을 불러오는 코드를 작성한다.

 

게시판폼 파일과 board.js파일은 같은 폴더에 위치해야 한다.

 

 

 

 

 

 

 

 

 

3. 회원가입 (유효성 검증, 파일 분리)

 

 

입력 양식 - 회원가입

1. 가장 상단에 폼 태그를 입력하고 값을 전달할 방식, 페이지가 넘어갔을때 출력할 파일명을 지정한다. 지금은 폼만 만들지만, 추후 자바스크립트나 제이쿼리에서 각 기능을 추가할 예정이다.

kiwikiwisae.tistory.com

 

 

 

 

 

 

html로 작성한 기존 코드 (body 영역에 작성했음)

 

<form method="post" action="member.jsp">

<table border=0 width=700 align=center>
	<caption>회원가입 폼</caption>
	
	<tr>
		<th>ID</th>
		<td>
     	   	<input type="text" name="id" id="id" autofocus>
		<input type="button" value="중복검사">	</td>
	</tr>
	
	<tr>
		<th>비밀번호</th>
		<td><input type="password" name="passwd" id="passwd"></td>
	</tr>
	
	<tr>
		<th>성명</th>
		<td><input type="text" name="name" id="name"></td>
	</tr>
	
	<tr>
		<th>주민번호</th>
		<td><input type="text" size=6 maxlength=6 name="jumin1" id="jumin1">
			-
		<input type="password" size=7 maxlength=7 name="jumin2" id="jumin2"></td>
	</tr>
	
	<tr>
		<th>E-mail</th>
		<td><input type="text" size=10 name="mailid" id="mailid">
		@
		<select>
			<option value="">직접입력</option>
			<option value="naver.com">네이버</option>
			<option value="daum.net">다음</option>
			<option value="naver.com">네이트</option>
			<option value="gmail.com">지메일</option>
		</select></td>
	</tr>
	
	<tr>
		<th>전화번호</th>
		<td><input type=tel1 size=4 maxlength=4 name="tel1" id="tel1">
		-
		<input type=tel2 size=4 maxlength=4 name="tel2" id="tel2">
		-
		<input type=tel3 size=4 maxlength=4 name="tel3" id="tel3"></td>
	</tr>
	
	<tr>
		<th>휴대폰</th>
		<td>
   	     <select name="phone1" id="phone1">
			<option value="">번호선택</option>
			<option value="010">010</option>
			<option value="011">011</option>
			<option value="016">016</option>
			<option value="018">018</option>
		</select>
		-
		<input type=phone2 size=4 maxlength=4 name="phone2" id="phone2">
		-
		<input type=phone3 size=4 maxlength=4 name="phone3" id="phone3"></td>
	</tr>
	
	<tr>
		<th>우편번호</th>
		<td><input type="text" size=5 maxlength=5 name="post" id="post">
		<input type="button" value="우편번호 찾기"></td>
	</tr>
	
	<tr>
		<th>주소</th>
		<td><input type="text" size=70 name="address" id="address"></td>
	</tr>
	
	<tr>
		<th>성별</th>
		<td>
			<input type="radio" name="gender" value="남자"> 남자
			<input type="radio" name="gender" value="여자"> 여자
		</td>
	</tr>
	
	<tr>
		<th>취미</th>
		<td>
			<input type="checkbox" name="hobby" value="공부" checked="checked">공부
			<input type="checkbox" name="hobby" value="영화">영화
			<input type="checkbox" name="hobby" value="그림">그림
			<input type="checkbox" name="hobby" value="음악">음악
			<input type="checkbox" name="hobby" value="고양이">고양이
		</td>
	</tr>
	
	<tr>
		<th>자기소개</th>
		<td>
        			<textarea rows="5" cols="70" name="intro" id="intro" 
       			 placeholder="자기소개를 입력해주세요."></textarea>
        </td>
	</tr>
	
	<tr>
		<td colspan=2>
			<input type="submit" value="회원가입">
			<input type="reset" value="취소">
		</td>
	</tr>
    
</table>

</form>

 

 

 

 

추가할 기능

 

 - ID 중복검사 버튼에 기능을 추가한다. 클릭 시 1) 공란인지 2)중복아이디인지 검증하는 두 가지 경우를 작성

 - 주민번호 앞자리 6개를 입력하면 자동으로 뒷자리 항목으로 커서 이동

 - E-mail 에서 도메인 입력 text폼을 새로 추가하고, 도메인을 선택하면 자동으로 입력되도록 설정

 - 휴대폰 앞자리 번호에 대한 유효성 검사

 - 우편번호 찾기를 클릭하면 검색할 수 있도록 팝업창 이벤트 추가 (api)

 - 우편번호 팝업창에서 검색을 완료하면 우편번호와 주소가 자동 입력되도록 하는 기능 추가

 - 성별에 대한 유효성 검증

 - 취미는 2개 이상 선택해야 하도록

 - 자기소개는 100자 이내로 입력

 

 

수정 사항

 

 - E-mail에 도메인 텍스트 폼을 추가하고 id와 name 값을 "domain"으로 지정

 - E-mail의 Select 폼에 id 값을 추가 (email)

 - 성별 각 항목에 id 값을 추가 (각각 male, female)

 - 취미의 각 항목에 id값을 추가

 

 

 

이제 head 영역에 함수를 작성해야 하는데,

로그인과 게시판의 경우와는 달리 (함수 하나에 모든 내용을 다 적어넣음)

각 폼에 맞춰 여러개의 함수를 작성한다.

 

 1) ID 중복검사를 하기 위한 함수 idcheck()

 2) 주민번호 뒷자리로 포커스를 이동하기 위한 함수 move()

 3) 도메인 선택을 위한 함수 sel()

 4) 우편번호 찾기 api 추가

 5) 전체적으로 유효성 검사를 하기 위한 함수 check()

 

 

 

1) idcheck()

ID 중복검사 버튼에 기능을 추가한다.

클릭 시 공란일 경우, 중복아이디인지 확인하는 경우

이 두 가지 경우로 작성한다.

 

 

	function idcheck() {
		var id = document.getElementById("id");
		
		if (id.value == "") {
			alert("ID를 입력하세요")
			id.focus();
			return false;
		} else {
			var ref = "idcheck.jsp?id="+id.value;
			window.open(ref, "idcheck", "width=300, height=200");
		}
	}

 

 

 

body 영역에 작성된 ID 중복검사 버튼에 onClick 이벤트 내용을 작성한다.

클릭 시 idcheck() 함수를 실행한다.

 

<input type="button" value="중복검사">

					↓
                    
<input type="button" value="중복검사" onClick="idcheck()">

 

 

아이디를 입력하지 않은 경우 경고창을 띄운다.

 

 

아이디를 입력한 경우 idcheck.jsp를 실행하는데 이 문서를 아직 작성하지 않았으므로 404에러 페이지가 뜬다.

 

 

 

폼을 통해서 값을 전송할 때에는 get / post 방식을 선택할 수 있는데,

창을 새로 띄울 때에는 get 방식으로만 가능하다.

 

그리고 memberform.html과 member.js 가 함께 저장된 폴더에 idcheck.jsp 파일을 생성해 다음 내용을 작성했다.

아직 jsp를 배우지 않았으므로 대략적인 설명만 들어서는 잘 모르겠다..

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	String id = request.getParameter("id");
%>

ID : <%=id%> <!-- 브라우저에 출력시킨다. -->

 

이 코드에서 getParameter("id") 는 var ref =  idcheck.jsp?id="+id.value 에서 물음표 다음의 id 이다.

 

여기까지 저장하고 중복검사를 실행해보면 404 에러가 뜨던 아까와는 다르게

입력 양식에 입력한 아이디가 뜬다.

 

 

 

자바스크립트에서 할 수 있는 기능 구현은 여기까지 이고 이후로는 jsp를 배울 때 마저 구현해보기로 한다.

 

 

 

 

 

2) move()

keyup 이벤트를 통해 주민번호 앞자리 6개를 입력하면 자동으로 뒷자리 항목으로 커서 이동하는 기능을 추가한다.

 

먼저, body 영역의 주민번호 앞자리 폼에 이벤트 핸들러를 작성한다.

 

<input type="text" size=6 maxlength=6 name="jumin1" id="jumin1">
                                
                               						 ↓
                                
<input type="text" size=6 maxlength=6 name="jumin1" id="jumin1" onKeyup="move()">

 

 

 

 

이 함수가 없으면

주민번호 앞자리 폼에 한글자라도 작성하는 순간 주민번호 뒷자리 폼으로 커서가 넘어가 버린다.

그러니 6번째 글자를 입력하고 키를 떼는 순간 포커스를 이동하는 내용을 작성한다.

 

	function move() {
		var jumin1 = document.getElementById("jumin1");
		var jumin2 = document.getElementById("jumin2");
		
		if (jumin1.value.length == 6) {
			jumin2.focus();
		}
	
	}

 

 

3) sel()

E-mail 에서 도메인 입력 text폼을 새로 추가했고,

도메인을 선택하면 자동으로 입력되도록 설정하는 것은 change 이벤트로 한다.

 

body 영역의 E-mail Select 폼에 이벤트 핸들러를 추가한다.

 

<select id="email">

			↓
            
<select id="email" onChange="sel()">

 

 

 

 

move함수의 내용을 작성한다.

 

 (1) 직접 입력 선택 시 - domain폼을 초기화한다.

 (2) 직접 입력 외 다른 선택 시 - 해당 사이트의 도메인을 domain폼에 자동 입력한다.

 

	function sel() {
		var domain = document.getElementById("domain");
		var email = document.getElementById("email");
		
		if (email.value == "") {		// (1) 직접 입력 선택 
			domain.value = "";
			domain.focus();
			domain.readOnly = false;
		} else {				// (2) 도메인 선택
			domain.value = email.value;	
			domain.readOnly = true; 	// 도메인 선택 시 값을 수정할 수 없도록 한다
		}
	}

 

else에만 readOnly = true; 값을 넣었을 때 발생하는 문제는

도메인을 선택했다가 직접입력을 선택했을 경우 readOnly = true가 계속 활성화 되어 있다.

그래서  domain 폼에 값을 입력할 수가 없게 된다.

그렇기 때문에 (1) 코드에 꼭 읽기 전용을 비활성화 해주는 코드를 넣어주어야 한다.

 

 

 

 

 

 

4) 우편번호 찾기 검색 버튼에 api 기능 추가

 

이 코드를 head 영역의 title 바로 아래에 복사-붙여넣기 한다.

다음에서 서비스 하는 주소 검색 기능을 추가한다.

<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script>
	function openDaumPostcode() {
		new daum.Postcode({
			oncomplete : function(data) {
				document.getElementById('post').value = data.zonecode;
				document.getElementById('address').value = data.address;
			}
		}).open();
	}
</script>

 

 

 

 

 

body영역의 우편번호 찾기 버튼에 클릭 이벤트를 지정한다.

 

<input type="button" value="우편번호 찾기">

						↓

<input type="button" value="우편번호 찾기" onClick="openDaumPostcode()">

 

 

잘 실행된다.

 

 

 

5)check()

너무 길어서 코드 블럭 대신 접은글로 첨부.

 

더보기

function check() {
var id = document.getElementById("id");
var passwd = document.getElementById("passwd");
var name = document.getElementById("name");
var jumin1 = document.getElementById("jumin1");
var jumin2 = document.getElementById("jumin2");
var mailid = document.getElementById("mailid");
var domain = document.getElementById("domain");
var tel1 = document.getElementById("tel1");
var tel2 = document.getElementById("tel2");
var tel3 = document.getElementById("tel3");
var phone1 = document.getElementById("phone1");
var phone2 = document.getElementById("phone2");
var phone3 = document.getElementById("phone3");
var post = document.getElementById("post");
var address = document.getElementById("address");
var male = document.getElementById("male");
var female = document.getElementById("female");
var h1 = document.getElementById("h1");
var h2 = document.getElementById("h2");
var h3 = document.getElementById("h3");
var h4 = document.getElementById("h4");
var h5 = document.getElementById("h5");
var intro = document.getElementById("intro");

if(id.value == "") {
alert("ID를 입력하세요");
id.focus();
return false;
}
if(passwd.value == "") {
alert("비밀번호를 입력하세요");
passwd.focus();
return false;
}
if(name.value == "") {
alert("이름을 입력하세요");
name.focus();
return false;
}
if(jumin1.value == "") {
alert("주민등록번호를 입력하세요");
jumin1.focus();
return false;
}
if(jumin1.value.length != 6) {
alert("6자리를 입력하세요");
jumin1.value="";
jumin1.focus();
return false;
}
/* isNaN : 대소문자 구분해서 써야한다. 문자가 포함되면 true를 리턴*/
if(isNaN(jumin1.value)) {
alert("숫자를 입력하세요");
jumin1.value="";
jumin1.focus();
return false;
}
  if(jumin2.value == "") {
alert("주민등록번호를 입력하세요");
jumin2.value = "";
jumin2.focus();
return false;
}
if(jumin2.value.length != 7) {
alert("7자리를 입력하세요");
jumin2.value="";
jumin2.focus();
return false;
}
if(isNaN(jumin2.value)) {
alert("숫자를 입력하세요");
jumin2.value="";
jumin2.focus();
return false;
}
if(mailid.value == "") {
alert("메일 주소를 입력하세요");
mailid.focus();
return false;
}
if(domain.value == "") {
alert("메일 주소를 입력하세요");
domain.focus();
return false;
}
if(tel1.value == "") {
alert("전화번호 첫번째 자리를 입력하세요");
tel1.focus();
return false;
}
if(isNaN(tel1.value)) {
alert("숫자를 입력하세요");
tel1.value = "";
tel1.focus();
return false;
}
if(tel2.value == "") {
alert("전화번호 두번째 자리를 입력하세요");
tel2.focus();
return false;
}
if(isNaN(tel2.value)) {
alert("숫자를 입력하세요");
tel2.value = "";
tel2.focus();
return false;
}
if(tel3.value == "") {
alert("전화번호 세번째 자리를 입력하세요");
tel3.focus();
return false;
}
if(isNaN(tel3.value)) {
alert("숫자를 입력하세요");
tel3.value = "";
tel3.focus();
return false;
}
if(phone1.value == "") {
alert("휴대폰 번호를 앞자리를 선택하세요");
phone1.focus();
return false;
}
if(phone2.value == "") {
alert("휴대폰 번호를 두번째 자리를 입력하세요");
phone2.focus();
return false;
}
if(isNaN(phone2.value)) {
alert("숫자를 입력하세요");
phone2.value = "";
phone2.focus();
return false;
}
if(phone3.value == "") {
alert("휴대폰 번호를 세번째 자리를 입력하세요");
phone3.focus();
return false;
}
if(isNaN(phone3.value)) {
alert("숫자를 입력하세요");
phone3.value = "";
phone3.focus();
return false;
}
if(post.value == "") {
alert("우편번호를 입력하세요");
post.focus();
return false;
}
if(address.value == "") {
alert("주소를 입력하세요");
address.focus();
return false;
}
/*두 라디오 버튼 모두 선택하지 않았을 때*/
if(male.checked == false && female.checked == false) {
alert("성별을 선택하세요");
return false;
}

/*name값 hobby, 각 항목은 h1~h5
체크박스를 2개 이상 선택해야 한다.*/
var cnt = 0;
if(h1.checked) cnt++;
if(h2.checked) cnt++;
if(h3.checked) cnt++;
if(h4.checked) cnt++;
if(h5.checked) cnt++;
/* 체크박스를 선택할때마다 변수 cnt가 증가한다. */
if(cnt < 2) {
alert("취미를 2개 이상 선택하세요");
return false;
}
if(intro.value == ""){
alert("자기소개를 입력하세요");
intro.focus();
return false;
}
if(intro.value.length > 100) {
alert("자기소개를 100자 이내로 입력하세요");
intro.focus();
return false;
}
}

 

 

이렇게 코드가 너무 길어지기 때문에 외부 파일로 따로 빼는 것이 확실히 편할 것 같다.

 

member.js 파일을 생성, 함수들을 모두 그곳에 따로 저장한다. (우편번호 찾기 api는 그대로 둔다.)

함수 여러개를 한꺼번에 저장하는 것은 괜찮지만 function을 중첩으로 작성하는 것은 안된다.

html문서에서 함수들이 빠진 부분에는 member.js파일을 불러오는 코드를 작성한다.

 

회원가입폼 파일과 member.js파일은 같은 폴더에 위치해야 한다.

 

'웹표준 > 자바스크립트' 카테고리의 다른 글

api 기능  (0) 2022.08.17
change 이벤트  (0) 2022.08.17
Submit 이벤트  (0) 2022.08.17
Keyup 이벤트  (0) 2022.08.17
History 객체를 이용한 페이지 정보 저장  (0) 2022.08.16

select 옵션에서 컬러 이름을 고르면 배경화면이 해당 컬러로 변경되는 예제

 

<head>
<script>
	function sel() {
		var favcolor = document.getElementById("favcolor");
		
		if(favcolor.value == "") {
			alert("색깔을 선택해주세요");
			return false;
		}
		document.bgColor = favcolor.value;
	} 
</script>
</head>

<body>
<form>
	<h1>좋아하는 색깔을 골라보세요!</h1><hr width=400>
	<br><br><br>
	<select id="favcolor" onChange="sel()">
		<option value="">선택</option>
		<option value="red">빨강</option>
		<option value="blue">파랑</option>
		<option value="yellow">노랑</option>
		<option value="black">검정</option>
		<option value="silver">하양</option>
		<option value="pink">분홍</option>
	</select>
	<br><br><br>
	<input type="button" value="확인" onClick="sel()">
</form>
</body>

 

 

 

 

방송국 명을 선택하면 해당 방송국 홈페이지로 이동하는 예제

 

<head>
<script>
	function move() {
		var sel = document.getElementById("sel");
		location.href = sel.value;
	}
</script>
</head>

<body>
<form>
	방송국 : 
	<select id="sel" onChange="move()">
		<option value="">선택</option>
		<option value="http://www.imbc.com">MBC</option>
		<option value="http://www.sbs.co.kr">SBS</option>
		<option value="http://www.kbs.co.kr">KBS</option>
	</select>
</form>
</body>

전송 기능이 없는 버튼은 클릭할 때 onClick이라는 이벤트가 발생하지만,

submit은 유효성 검사를 통해 서버로 정보를 전송하는 이벤트를 발생시킨다.

 

이 submit 이벤트는 form 태그 안에 처리를 해야 한다.

 

<form method="post" action="send.jsp" onSubmit="check()">

 

head 영역에 check()라는 유효성 검사용 함수를 만들어서 통과하면 submit을 실행되도록 하는데,

이렇게만 추가하면 유효성 검사를 하지 않고 그냥 submit 되어 버린다.

return을 꼭 추가해주어야 한다.

 

<form method="post" action="send.jsp" onSubmit="return check()">

 

또, 유효성 검증용 함수의 조건식에도 반드시 return이 있어야 한다.

 

 

 

 

전체 코드는 다음과 같다.

 

<head>
<script>
	function check() {
		var name = document.getElementById("name");
		var email = document.getElementById("email");
		
		if (name.value == "") {
			alert("이름을 입력하세요.");
			name.focus();
			return false;
		}
 		if (email.value == "") {
			alert("이메일을 입력하세요.");
			email.focus();
			return false;
		} 		
	}
</script>
</head>
<body>
<form method="post" action="send.jsp" onSubmit="return check()">
	이름 : 
	<input type=text id="name" name="name"><br>
	이메일 : 
	<input type=text id="email" name="email"><br>
	<input type=submit value="전송"><br>
</form>
</body>

 

 

 

키보드 관련 이벤트는 3가지가 있다.

keyup, keydown, keypress 인데,

그 중 keyup은 키보드를 눌렀다가(keypress) 손을 떼는 순간 발생한다.

 

 

 

 

실습으로 주민번호 입력 양식을 만들어보았다.

앞자리는 숫자 6개, 뒷자리는 숫자 7개로 제한하는데,

앞자리 폼을 다 입력하면 커서가 자동으로 뒷자리 폼으로 넘어가도록 한다.

앞자리 폼, 뒷자리 폼에는 id 값을 부여하고

앞자리 폼인 jumin1 에 on을 붙여 이벤트 핸들러 onKeyup을 만든다.

이 이벤트 핸들러는 head 영역에 정의한 함수를 호출한다.

 

<head>
<script>
	function move(){
		var jumin1 = document.getElementById("jumin1");
		var jumin2 = document.getElementById("jumin2");
	}
</script>
</head>
<body>
주민번호 : 
<input type=text size=6 maxlength=6 id="jumin1" onKeyup="move()"> -
<input type=text size=7 maxlength=7 id="jumin2">
</body>

 

 

그런데 여기까지만 입력하면 앞자리폼에 6자리를 입력해야 하는데,

한 글자만 입력해도 뒷자리로 넘어가버리는 일이 발생한다.

그래서 head 영역에 정의한 함수에 조건식을 추가한다.

 

<head>
<script>
	function move(){
		var jumin1 = document.getElementById("jumin1"); // id가 jumin1인 객체의 값을 구해온다.
		var jumin2 = document.getElementById("jumin2");
		
	if (jumin1.value.length == 6) 		/* 조건식의 좌항과 우항이 바뀌면 안된다. */
		jumin2.focus()
	}
</script>
</head>

 

 

 

 

 

'웹표준 > 자바스크립트' 카테고리의 다른 글

change 이벤트  (0) 2022.08.17
Submit 이벤트  (0) 2022.08.17
History 객체를 이용한 페이지 정보 저장  (0) 2022.08.16
Window 객체를 이용한 팝업 생성하기  (0) 2022.08.16
이벤트 처리 방법  (0) 2022.08.16

브라우저에서 방문한 정보를 저장하여 이동할 수 있다.

 

특성 length url 주소의 개수
메소드 back() 이전 파일로 이동
forward() 다음 파일로 이동
go() 괄호에 넣는 숫자에 따라 임의의 위치로 이동
음수를 넣으면 back(),
양수를 넣으면 forward() 가 된다.

 

back()이나 forward()에는 숫자를 사용할 수 없고 원형 그대로 사용해야 한다.

 

'웹표준 > 자바스크립트' 카테고리의 다른 글

Submit 이벤트  (0) 2022.08.17
Keyup 이벤트  (0) 2022.08.17
Window 객체를 이용한 팝업 생성하기  (0) 2022.08.16
이벤트 처리 방법  (0) 2022.08.16
이벤트와 이벤트 핸들러  (0) 2022.08.16

meta태그로 이동을 하면 시간 제어가 가능하다.

 

다음 코드를 실행하면 실행 3초 후 지정된 페이지로 이동한다.

 

refresh는 새로고침,

content의 3은 시간을 의미한다. 단위는 second

 

<body>

<meta http-equiv="refresh" content="3; url=http://www.naver.com">

</body>

 

 

 

 

'웹표준 > HTML5' 카테고리의 다른 글

입력 양식 - Hidden  (0) 2022.08.05
입력 양식 - 회원가입  (0) 2022.08.05
입력 양식 - 게시판  (0) 2022.08.05
입력 양식 - 로그인 폼의 login.jsp 생성, GET방식과 POST방식  (0) 2022.08.05
입력 양식 - 로그인 폼  (0) 2022.08.04

다음과 같은 순서를 지켜 작성해야 한다.

 

			open ("실행할URL", "문서이름", "옵션")

 

이 때, 옵션에 가로, 세로 크기를 지정하는 내용이 반드시 들어가야 한다.

(width, height)

 

 

 

 

간단한 팝업창을 띄워본다.

 

<script>
	open("http://www.daum.net", "mywin01", "width=200, height=400");
</script>

 

캡쳐를 하기 위해 팝업창 위치를 옮겼는데,

별도로 옵션을 지정하지 않으면 좌측 상단에 열리는 것이 기본값이다.

 

 

 

 

실행 위치는 다음과 같은 형식으로 지정한다.

 

<script>
	window.open("http://www.daum.net", "mywin01", "width=200, height=400")
	window.open("http://www.kakao.com", "mywin02", "width=200, height=400 left=300, top=100")
</script>

 

 

 

 

 

팝업 함수를 응용하여

새 창이 열리는 버튼과 창을 닫아주는 버튼을 생성해보았다.

이전에 날짜와 시간을 출력하는 문서를 date01.html 이라는 이름으로 저장했는데,

그 문서를 새 창으로 열어보았다.

 

<head>
<script>
	function winopen(){
		window.open("date01.html", "mywin01", "width=400, height=200");
	}
	
	function winclose(){
		window.close();
		
	}
</script>
</head>
<body>
	<input type="button" value="새 창 열기" onClick="winopen()">
	<input type="button" value="창 닫기" onClick="winclose()">
</body>

 

 

이 때, winclose 함수에는 아무것도 지정하지 않았다.

내가 닫으려고 하는 것은 새로 팝업으로 열리는 date01.html 문서인데,

저 상태에서 실행한다면 부모 윈도우만 닫히고 date01.html 문서는 닫히지 않는다.

 

 

 

 

그래서 head의 function 위쪽에 변수 w1를 설정해서 코드를 수정한다.

 

<script>
	var w1;
	
	function winopen(){
		w1 = window.open("date01.html", "mywin01", "width=400, height=200, left=500, top=200");
	}
	
	function winclose(){
		w1.close();
		
	}
</script>

 

 

 

 

창닫기를 누르면 date01.html 팝업창만 종료된다. 부모 윈도우는 종료되지 않는다.

 

 

 

 

 

'웹표준 > 자바스크립트' 카테고리의 다른 글

Keyup 이벤트  (0) 2022.08.17
History 객체를 이용한 페이지 정보 저장  (0) 2022.08.16
이벤트 처리 방법  (0) 2022.08.16
이벤트와 이벤트 핸들러  (0) 2022.08.16
Math 객체  (0) 2022.08.12

1. inline 방식

 

가장 쉽게 쓸 수 있는 방식.

버튼을 '클릭' 했을 때 이벤트가 발생하기 때문에 onClick 핸들러를 사용한다.

 

<script>
	function check() {
		alert('Hello World');
	}
</script>
</head>
<body>
	<input type="button" id="btn" value="확인" onClick="check()">
</body>

 

 

 

 

 

 

2. property 방식

 

tag=element

이벤트 타겟이 되는 객체의 프로퍼티에 이벤트를 등록하는 방식이다.

 

<body>
	<input type="button" id="btn" value="확인">
<script>
	var btn=document.getElementById('btn');
	
	btn.onclick=function(){
		alert('Hello World');
	}
</script>

 

 

 

 

 

3. 표준 이벤트 모델 방식 (dom level2 방식)

  

한 객체에 여러 이벤트를 등록할 수 있다.

 

W3C의 표준 방식을 따르는 브라우저(크롬, 파이어폭스, 사파리...)와

비표준 방식으로 동작하는 IE8 이하 버전 브라우저 모두 동작할 수 있도록 구분자 if ~ else if 문으로 작성해야 한다.

 

<body>
	<input type="button" id="btn" value="확인">
	<script>
		var btn = document.getElementById('btn');

		function btnEvent1() {
			alert('Hello world 1');
		}
		function btnEvent2() {
			alert('Hello world 2');
		}
		if (btn.addEventListener) { // 표준 방식 브라우저
			btn.addEventListener('click', btnEvent1); // 복수개의 이벤트 등록 가능
			btn.addEventListener('click', btnEvent2);
		} else if (btn.attachEvent) { // 비표준 방식브라우저
			btn.attachEvent('onclick', btnEvent1); // 복수개의 이벤트 등록 가능
			btn.attachEvent('onclick', btnEvent2);
		}
	</script>
</body>

 

'웹표준 > 자바스크립트' 카테고리의 다른 글

History 객체를 이용한 페이지 정보 저장  (0) 2022.08.16
Window 객체를 이용한 팝업 생성하기  (0) 2022.08.16
이벤트와 이벤트 핸들러  (0) 2022.08.16
Math 객체  (0) 2022.08.12
String 객체  (0) 2022.08.12

버튼을 누르거나, 텍스트 위로 마우스가 지나가는 등의 어떤 동작이 일어나는 것을 이벤트라고 한다.

특정 이벤트가 발생했을 때, 함수가 실행되도록 하는 것이 이벤트 핸들러이다.

 

 

blur 입력 양식에서 포커스가 다른 곳으로 이동
click 입력 양식에서 링크를 마우스로 클릭
focus 입력 양식 필드로 포커스가 들어옴
load 브라우저에서 문서를 읽어옴
unload 브라우저에서 문서가 사라짐
select 입력 양식의 한 필드를 선택
submit 입력 양식을 서버로 전송
abort 이미지를 읽다가 중단
error 문서나 이미지를 읽다가 에러 발생
mouseover 링크 위로 마우스가 지나감
mouseout 링크나 특정 영역 안에 마우스가 있다가 나갔을 때
mousemove 마우스를 움직임
mousedown 마우스 버튼을 누름
mouseup 마우스 버튼을 눌렀다 놓음
dbclick 마우스를 더블클릭
dragdrop 마우스를 클릭한 상태로 움직임
keypress 키를 누름
keyup 키를 눌렀다 놓음
move 윈도우나 프레임을 움직임
resize 윈도우나 프레임의 크기를 바꿈
reset 입력 양식에서 리셋

 

'웹표준 > 자바스크립트' 카테고리의 다른 글

Window 객체를 이용한 팝업 생성하기  (0) 2022.08.16
이벤트 처리 방법  (0) 2022.08.16
Math 객체  (0) 2022.08.12
String 객체  (0) 2022.08.12
배열과 Array 객체  (0) 2022.08.12

+ Recent posts