개요
자바스크립트를 사용하다 보면 여러 페이지에서 사용할 수 있는 공통 함수를 만들고 싶을때가 많다.
여러 상황이 있겠지만 예를 들면 프로젝트를 진행하면서 여러 군데에서 같은 팝업 창을 띄울 상황이 있을 때가 있다.
그래서 이 때 fn을 이용하여 사용자 정의 함수를 만들고 공통 자바스크립트 파일에 저장한 후 필요한 곳에서 불러서 써보는 예제를 통해 fn의 사용법에 대해 알아보고자 작성했다.
fn?
https://learn.jquery.com/plugins/basic-plugin-creation/
How to Create a Basic Plugin | jQuery Learning Center
Sometimes you want to make a piece of functionality available throughout your code. For example, perhaps you want a single method you can call on a jQuery selection that performs a series of operations on the selection. In this case, you may want to write
learn.jquery.com
fn은 재사용이 가능한 제이쿼리에 플러그인을 만드는 작업이라고 할 수 있다. 우리는 보통 jquey에서 어떤 함수를 사용할 때 셀렉터($)를 통해 사용하고자 하는 위치를 지정한다. 이때 jquery는 $.fn객체로부터 필요한 jquery기본 메소드들을 가져오게 된다.
때문에 우리는 $.fn 객체에서 사용하고자 하는 사용자 정의 메소드를 추가할 수 있다.(이것은 플러그인을 만드는 작업이라고도 할 수 있다.)
이 사용자 정의 메소드에서 모든 jquery 함수들을 상속받아 사용할 수 있다.
간단한 예제를 통해 살펴보면
// 사용자 정의 메소드 정의
$.fn.ex1 = function() {
this.css("color", "blue");
};
$.fn.함수이름을 통해 선언한 뒤 jquery의 css()함수를 사용하여 ex1이라는 사용자 정의 메소드를 만들었다.
공통 팝업 띄우기
먼저 해당 예제는 ex_common.js(사용자 정의 메소드를 선언하는곳), ex_use.jsp(선언한 메소드를 사용하는곳), ex_popup.jsp(팝업창)으로 이루어져 있다.
//excommon.js
$.fn.commonExPopup = function(callback, option) {
//callback변수를 통해 부모창에서 수행하는 동작, 혹은 파라미터를 전달한다.
//option 변수에서 공통팝업에서 추가적인 옵션값을 부여할 수 있다.(해당 예제에서는 checkbox라는 옵션을 부여함)
var ex_popup;
var checkbox = option && option.checkbox ? option.checkbox : null;
var url = '/common/popup/exPopup' + (checkbox ? '?checkbox=Y' : '');
var popup_option = checkbox ? 'width=800,height=920' : 'width=800,height=810'
$(this).on('click', function() { //클릭 시 해당 url의 팝업을 호출한다.
//cp는 기본 경로로써 전역변수로 선언했다. (해당 예제에서는 제외함)
ex_popup = window.open(cp + url, "ex_popup", popup_option);
});
window.callbackExPopup = callback;
return function() {
return ex_popup;
};
}
사용자 메소드를 부여한 버튼을 클릭했을 때 해당 팝업이 열리게 구현하였다.
그리고 팝업창과 부모창에서 데이터를 교환하는 부분은 callback변수를 사용해 값을 주고받을 수 있다.
추가적으로 option변수를 하나 더 만들어서 checkbox를 true로 주었을 시 checkbox가 들어가는 기능을 추가하였다. checkbox는 url을 통해 checkbox=Y로 값을 전달하고 해당 팝업의 jsp페이지에서 queryObject를 통해 값을 가져와 사용할 수 있다.
var displayChk = queryObject.checkbox;
//checkbox가 Y일 경우 해당 페이지 내에서 분기처리하여 사용할 수 있음.
다음은 commonExPopup을 사용하는 부모 창의 스크립트 예제이다.
//ex_use.jsp
var ex_popup = $('button[name=btnOpenExPop]').commonExPopup(function(data){
//해당 버튼의 이름을 통해 commonExPopup 메소드를 호출함
if(data.length > 0){
//
//해당 팝업 창에서 동작했을 시 부모창에서 수행할 동작을 정의하는 부분
//
}
ex_popup().close(); //팝업 닫아줌.
}, {checkbox:true});
버튼 이름을 통해 호출한 뒤 callback받은 데이터에 대한 값들을 가지고 코딩할 수 있다. checkbox:true 로 option 값을 부여해 주었다.
마지막으로 callback변수에 데이터를 넣는 부분은 해당 팝업페이지에서
//ex_popup.jsp
window.opener.callbackExPopup(data);
을 통해 data를 던지면 된다. 이 data는 excommon.js에서 callback 파라미터로 받아서 사용할 수 있다.
마무리
프로젝트의 크기가 커지고 사용하는 스크립트들이 많아질수록 공통으로 처리할 것들이 많아질 때 해당 사용자 정의 메소드가 유용하게 쓰인다는 점을 알았다.
특히 해당 callback변수를 사용하는 부분에서 데이터를 어떻게 가져오는지, 또 어떻게 사용하는지에 대해 조금 더 익숙해져야할 필요성을 느꼈다.
'JAVASCRIPT > 요점정리' 카테고리의 다른 글
[자바스크립트]ES6 문법정리(2) - 호이스팅 그리고 const, let (4) | 2023.03.25 |
---|---|
[jquery]제이쿼리 자바스크립트 라디오버튼,체크박스,셀렉트박스 option 값 가져오기, 체크여부 확인, 체크박스 여러개 체크값 가져오기 (6) | 2023.02.24 |
[자바스크립트]ES6 문법정리(1) - var의 문제점 (7) | 2023.02.23 |
댓글