본문 바로가기
언어/JavaScript

[JavaScript] 팝업페이지에서 데이터 받아오기

by 만_두 2022. 3. 10.

회원 정보 수정폼에서 닉네임 변경 버튼을 클릭하면 팝업페이지가 뜨고, 팝업 페이지에서 닉네임 중복확인 버튼을 눌러서 사용할 수 있는 닉네임이면 confirm창이 뜹니다.

confirm창에서 확인 버튼을 누르면 창이 닫히고, 회원 정보 수정폼에 닉네임 값이 반영되게끔 만들었습니다.

 

- 회원 정보 수정폼

//팝업 띄우는 함수 
function showPopup(){
	PopupCenter("popup_page.jsp","팝업창",800,600);
}

//팝업을 중앙에 원하는 페이지를 원하는  크기로 띄우는 함수 
function PopupCenter(url, title, w, h) {
   // Fixes dual-screen position                         Most browsers      Firefox
   var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
   var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
   
   width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
   height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
   
   var left = ((width / 2) - (w / 2)) + dualScreenLeft;
   var top = ((height / 2) - (h / 2)) + dualScreenTop;
   var newWindow = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
   
   // Puts focus on the newWindow
   if (window.focus) {
       newWindow.focus();
   }

}

function inputName(nName){
	frm.name.value=nName;
}

회원 정보 수정폼에서 밑의 코드로 팝업창의 값을 받아왔습니다.

function inputName(nName){
	frm.name.value=nName;
}

-팝업 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<script  src="http://code.jquery.com/jquery-latest.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>

window.onload=function(){
	let btnName=document.querySelector("#btnName");
	btnName.addEventListener("click", checkName);
}

function checkName(){
	   let useName=document.querySelector(".nName").value;
	   //alert(useName);
	   $.ajax({
	      url:"useName",
	      type:"post",
	      dataType:"json",
	      data:{useName:useName},
	      success: function(data){
	         name=0;
	         if(data.result=="y"){
	        	 if(document.querySelector("#nName").value.length>document.querySelector("#nName").size){
	            	   alert("닉네임을 20글자 이내로 입력해주세요");
	            	      frm.nName.focus();
	            	      return;
	               }
	            if(useName==""){
	               alert("닉네임을 입력하세요");
	               frm.nName.focus();
	            }else{
	               if(confirm("사용할 수 있는 닉네임입니다.\n사용하시겠습니까?")===true){
	            	   
	            	   let nName=document.frm.nName.value;
	            	   window.opener.inputName(nName);
	            	   self.close();
	               }
	                 
	            }
	         }else if((data.result=="n")){
	            alert("사용할 수 없는 닉네임입니다.");
	         }
	      },
	      error:function(){
	         alert("에러 발생");
	      }
	      
	   });
	   
	}



</script>
</head>
<body>
<%
	//로그인된 아이디가 있는지 확인
	int userNo = (Integer) session.getAttribute("userNo");
%>

	<h3>닉네임 변경</h3>
	
	<!-- 닫기버튼 클릭시 아래 폼을 전송함 -->
	<form action="close.jsp" method="post">
	</form>
	
	
	<!-- 팝업창에 닉네임을 사용하겠냐는 질문 confirm에서 확인 클릭시 아래 폼을 전송함. -->
	<form id="modify2" method="post" action="modify2" name="frm">
	<input type="hidden" name="userNo" value=<%=userNo %>>
		닉네임
		<input type="text" name="nName" id="nName" class="nName">
		<input type="button" value="중복확인" id="btnName">
		
	</form>
	
	
	<input type="button" value="닫기" onclick="location.href='close.jsp'"></button>
</body>
</html>

 

팝업 페이지에서 밑의 코드로 값을 회원 정보 수정폼으로 넘겼습니다.

if(confirm("사용할 수 있는 닉네임입니다.\n사용하시겠습니까?")===true){
   let nName=document.frm.nName.value;
   window.opener.inputName(nName);
   self.close();
}

닉네임 변경 버튼 클릭 시 팝업창이 뜹니다.

이미 사용중인 닉네임을 쓰면 사용할 수 없다고 나옵니다.

사진 속에는 닉네임 input에 disaabled를 사용했었는데 값이 넘어가지 않아서 이후에 readonly로 바꿨습니다.

 

참고한 블로그 : https://ggoreb.tistory.com/70

댓글