동적으로 영역을 불러올 때
그 추가된 영역에 관한 이벤트를 함수로 등록할 경우,
불러올때마다 해당 함수를 등록해주어야 한다.
나 같은 경우는 영역에 클래스를 주어 .each()로 이벤트를 전체로 주는 방식을 사용했는데
이런 문제가 발생한 적이 있었다.
<영역>
~~~~~ <button>
~~~~~ <button>
------------------------> btnFunction() 등록
~~~~~ <button>
~~~~~ <button>
~~~~~ <button>
------------------------> btnFunction() 등록
~~~~~ <button>
------------------------> btnFunction() 등록
function btnFunction() {
$('button').each(function() {
$(this).on('click', function() {
~~~~~~~~~~~~~
});
});
}
나는 'button'영역에 each를 돌린거라 딱히 여러번 등록해도 별 상관이 없을 줄 알았는데,
1번째 추가된영역 --> 3번
2번째 추가된영역 --> 2번
3번째 추가된영역 --> 1번
이런 식으로 이벤트가 계속 쌓이는 문제가 발생했다.
그래서 아래와 같이 로직 전에 e.preventDefault();로 막아주고 싶었는데 작동하지 않았다.
function btnFunction() {
$('button').each(function() {
$(this).on('click', function(e) {
e.preventDefault();
~~~~~~~~~~~~~
});
$(this).click(function(e) {
e.preventDefault();
~~~~~~~~~~~~~
});
});
}
그래서 아래와 같이 해결
function btnFunction() {
$('button').each(function() {
$(this).off('click');
});
}
- preventDefault() : 기본적으로 등록되어 있는 이벤트를 해제할 때
- off() : 개발자가 바인딩 시킨 이벤트를 해제할 때
위와 같은 차이점이 있어 에러가 있었다.
'Dev- > java script, jQuery, Ajax' 카테고리의 다른 글
자바스크립트 replaceAll을 하고 싶을때 (0) | 2019.04.01 |
---|---|
jQuery ajax 동기식으로 사용하기 (0) | 2019.03.20 |
Ajax를 사용하다가.. (0) | 2018.08.03 |
.submit()이 작동되지 않을 때 (0) | 2018.08.02 |
jQuery 부모요소, 자식요소 찾기 (0) | 2018.07.31 |