wrkbrs
사용자함수 | 이벤트핸들러 1회 적용하고 제거하기 addEventListenr() / removeEventLitener(), on() / … 본문
JS
사용자함수 | 이벤트핸들러 1회 적용하고 제거하기 addEventListenr() / removeEventLitener(), on() / …
zcarc 2018. 12. 21. 14:30네이티브자바스크립트
element.addEventListener(),
element.removeEventListener(),
등에 사용하는 이벤트핸들러를 선언한뒤에 제거하는 방법은..
사용자함수를 선언하여 삭제하도록 되어있다..
function aaa(){
alert('사용자함수 실행');
}
element.addEventListener("click", aaa);
element.removeEventListener("click", aaa);
하지만 때에 따라서는 바로 익명함수를 콜백으로 써서 활용하게 된다면...
element.addEventListener("click", function(){
alert('익명함수 실행');
});
위의 방법으로 이벤트핸들러를 적용했다면 적용된 함수를 제거할 방법이 없다.
물론, 다음과 같이 한다면 제거되겠지만 여러가지 클릭이벤트를 선언하고 추가했다면 클릭이벤트핸들러가 모두 제거가 되어버린다.
element.addEventListener("click", function(){
alert('익명함수 실행');
this.removeEventListener("click");
});
따라서 다음과 같이 특별한 클릭이벤트 핸들러를 특별히 실행후 제거해야 한다면 다음과 같이
arguments.callee 를 사용하여 스스로의 함수를 지정하여 제거하면 된다.
element.addEventListener("click, function(){
alert('익명함수 실행');
this.removeEventListener("click",arguments.callee);
});
제이쿼리를 사용한다면 다음과 같이
이벤트타입뒤에 오늘 네임스페이스를 활용하여 이름을 지정하고 선언한뒤에 제거하면 된다.
$("#main_article a").on("click",function(){
alert("a click all");
return false;
return false;
});
$("#main_article > div:eq(1) > article:eq(0) > h4 > a").on("click.notice",function(){
alert("notice");
$(this).off("click.notice");
return false;
});
on(), off()외에도
이전 제이쿼리를 쓴다면
clcik()또는 bind(), unbind()
등을 위와 같이 응용하여 사용하면 된다.
다음의 예시를 참고해보자.
-------------------------------------------------------------------
<div id="main_article">
<div>
<dl>
<dt>고객센터</dt>
<dd>063) 224-6160</dd>
</dl>
<div>
<p>"언제든지 전화주시면<br /> 친절하게 답변드리겠습니다."</p>
<dl>
<dt>24시간 상담전화</dt>
<dd>010-3678-4242</dd>
</dl>
</div>
</div>
<ul>
<li>기계운반, 중량물 산업기계</li>
<li>특수정밀 기계설치 운반, 상/하차</li>
<li>산업기계 PLANT TANK 설치</li>
<li>철구조물 제작 및 설치작업</li>
<li>기계 도비작업</li>
</ul>
<div>
<article>
<h4><strong>알립니다</strong><a href="#">자세히 보기</a></h4>
<ul>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
</ul>
</article>
<article>
<h4><strong>시공실적</strong><a href="#">자세히 보기</a></h4>
<ul>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
</ul>
</article>
</div>
<div>
<dl>
<dt>고객센터</dt>
<dd>063) 224-6160</dd>
</dl>
<div>
<p>"언제든지 전화주시면<br /> 친절하게 답변드리겠습니다."</p>
<dl>
<dt>24시간 상담전화</dt>
<dd>010-3678-4242</dd>
</dl>
</div>
</div>
<ul>
<li>기계운반, 중량물 산업기계</li>
<li>특수정밀 기계설치 운반, 상/하차</li>
<li>산업기계 PLANT TANK 설치</li>
<li>철구조물 제작 및 설치작업</li>
<li>기계 도비작업</li>
</ul>
<div>
<article>
<h4><strong>알립니다</strong><a href="#">자세히 보기</a></h4>
<ul>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
</ul>
</article>
<article>
<h4><strong>시공실적</strong><a href="#">자세히 보기</a></h4>
<ul>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
<li><a href="#"><span>홈페이지가 새롭게 오픈되었습니다.</span><span>2014/02/15</span></a></li>
</ul>
</article>
</div>
----------------------------------
네이티브 자바스크립트 핸들러에서는 arguments.callee 를 사용하여 스스로의 함수를 제거.
▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽
var aTag = document.getElementById("main_article").getElementsByTagName("article")[0].getElementsByTagName("a")[0];
aTag.addEventListener("click", function(){
alert('공통 클릭 실행');
});
aTag.addEventListener("click", function(){
alert('익명함수 실행');
this.removeEventListener("click",arguments.callee);
});
----------------------------
제이쿼리 핸들러에서는 이벤트 핸들러의 네임스페이스 활용하여 제거
▽▽▽▽▽▽▽▽▽▽▽
$("#main_article a").on("click",function(){
alert("a click all");
return false;
return false;
});
$("#main_article > div:eq(1) > article:eq(0) > h4 > a").on("click.notice",function(){
alert("notice");
$(this).off("click.notice");
return false;
});
http://bamtol.net/v5/bbs/board.php?bo_table=pp_js&wr_id=45
'JS' 카테고리의 다른 글
[Javascript] document.getElementById("abc").innerHTML="" 사용법 (0) | 2018.12.21 |
---|---|
javascript / jquery 를 이용한 id, name, class 값 가져오기 (0) | 2018.12.21 |
[Javascript] 내장함수 eval() 문자열을 수식으로 바꾸는 방법 (0) | 2018.10.28 |
[JavaScript] undefined/null 의 true/false 비교 (0) | 2018.10.27 |
[Javascript] 폼(form) 전송과 submit 버튼(onsubmit 유형) (0) | 2018.10.27 |