자바스크립트를 사용해서 event bind, unbind 하는 경우
dom 에 미리 등록한 function이 아닌 경우
unbind 되지 않는다.
예를 들어
obj.addEventListener("click", function(){ alert(11) });
obj.removeEventListener("click", function(){ alert(11) });
처럼 이벤트에 function을 사용하면 각각 다른 function으로 인식하여
unbind 되지 않는다.
그래서 event bind 시 function을 bind 하고 그걸 저장하였다가
같은 key값으로 호출하는 경우 bind 된 function으로 unbind 처리하였다.
아래는 소스이니 참고들 하시길,,,,,
//-------------------------------------------------------
// event bind
// ex) $U.eventbind(window,"onresize",chart_common.draw);
//-------------------------------------------------------
, eventbind :
function (vobj, vEvent, pFunction, vrecheck) {
let obj = vobj;
if (typeof(vobj) === "string"){
obj = $hD(vobj);
}
let vFunction = pFunction.bind();
let vkey = pFunction.toString().replaceAll(/ /g,"");
$GC._U_EVENT_CAPTION.push(vkey)
$GC._U_EVENT_OBJ.push(vFunction);
if ($U.isNull(obj)){
if (vrecheck === true){
} else{
setTimeout(function(){ //--** 화면로드등으로 인해 시간이 지체되는 경우 3초뒤 한번더 체크
$U.eventbind(vobj, vEvent, vFunction, true);
},3000);
}
return;
}
if (obj === window){
obj.addEventListener(vEvent.substring(2), vFunction, {capture:false,once:false,passive:$GC._BROWSER_MOBILE_CHK} );
return;
}
if ($U.isNullOrEmpty(vFunction)) return;
if ($U.isNull(obj.length) || obj.length === 0){
if (obj.addEventListener){
obj.addEventListener(vEvent.substring(2), vFunction, {capture:false,once:false,passive:$GC._BROWSER_MOBILE_CHK} );
} else {
if (obj[vEvent]){
obj.attachEvent(vEvent, vFunction);
} else {
obj[vEvent] = vFunction;
}
}
} else {
for (var q=0,eoobj;eoobj=obj[q];q+=1){
if (eoobj.addEventListener){
eoobj.addEventListener(vEvent.substring(2), vFunction, {capture:false,once:false,passive:$GC._BROWSER_MOBILE_CHK} );
} else {
if (eoobj[vEvent]){
eoobj.attachEvent(vEvent, vFunction);
} else {
eoobj[vEvent] = vFunction;
}
}
}
}
}
//-------------------------------------------------------
// event unbind
// addEvent 시 리턴받은 토큰이나 function Name 로 사용시
//-------------------------------------------------------
, eventunbind :
function (vobj, vEvent, pFunction, vrecheck) {
let obj = vobj;
if (typeof(vobj) === "string"){
obj = $hD(vobj);
}
let vFunction = pFunction;
let vkey = pFunction.toString().replaceAll(/ /g,"");
for(let iuyt=0,chkey; chkey=$GC._U_EVENT_CAPTION[iuyt]; iuyt+=1 ){
if (chkey === vkey){
vFunction = $GC._U_EVENT_OBJ[iuyt];
}
}
if ($U.isNull(obj)){
if (vrecheck === true){
} else{
setTimeout(function(){ //--** 화면로드등으로 인해 시간이 지체되는 경우 3초뒤 한번더 체크
$U.eventunbind(vobj, vEvent, vFunction, true);
},3000);
}
return;
}
if (obj === window){
obj.removeEventListener(vEvent.substring(2),vFunction, {capture:false,once:false,passive:$GC._BROWSER_MOBILE_CHK} );
return;
}
if ($U.isNull(obj.length) || obj.length === 0){
if (obj.removeEventListener){
obj.removeEventListener(vEvent.substring(2),vFunction, {capture:false,once:false,passive:$GC._BROWSER_MOBILE_CHK} );
} else {
if (obj[vEvent]){
obj[vEvent] = null;
} else {
try{
obj.detachEvent(vEvent, vFunction);
} catch(e){
}
}
}
} else {
for (var q=0,eoobj;eoobj=obj[q];q+=1){
if (eoobj.removeEventListener){
eoobj.removeEventListener(vEvent.substring(2),vFunction, false );
} else {
if (eoobj[vEvent]){
eoobj[vEvent] = null;
} else {
try{
eoobj.detachEvent(vEvent, vFunction);
} catch(e){
}
}
}
}
}
}
'IT' 카테고리의 다른 글
mybatis foreach sybase (0) | 2022.05.27 |
---|---|
Sybase 는 정말 .. 에휴,,, eucksc 한글 charset 인경우 (0) | 2022.03.17 |
스프링 페이징 처리.. (0) | 2022.03.17 |
전자정부프레임웍 ,, log4j 보안이슈 (0) | 2021.12.17 |
[웹폰트] 웹폰트 로딩 속도 빠르게 하기 (0) | 2021.11.20 |