2016-09-03 4 views
-1

그래서 JQuery를 초기 상태로 다시 설정하고 있습니다. 여기 내 코드가이전 JQuery 상태를 다시 설정하십시오.

<script src="http://code.jquery.com/jquery-2.2.1.min.js"></script> 
<a href="#" id="link1">link1</a> 

<script> 
var copiedObject = jQuery.extend(true, {}, this); // initial state 

$(document).on("click", "#link1", function() { 
    alert("clicked link 1"); 
    return false; 
});  

Object.keys(this).forEach(function (c) { 
    if(c=='jQuery'||c=='$'){  
     this[c]=copiedObject[c]; 
    } 
}); 
</script> 

나는 이것을 실행할 때 여전히 link1을 실행할 수있다. 바인딩을 추가하기 전에이 [jQuery]와이 [$]에 복사본이 있어야하지 않습니까? 클릭 이벤트를 추가하기 전에 copiedObject에 버전이 있으므로 내가 이전에 바인딩을 다시 시작할 수 있도록이 메서드를 구현하고 싶습니다. 나는 "off"를 사용할 수 있지만이 예제에서는 더 많은 JQuery 이벤트 바인딩이있을 수 있으며 모든 바인딩이 추가되기 전에 인스턴스를 다시 작성하기 만하면됩니다.

+0

귀하의 질문에 약간 혼란이 있습니다. 귀하의 문제를보다 명확하게 진술하도록 편집 할 수 있습니까? –

+1

실제로 무엇을 하려는지 확실하지 않은 경우 바인딩을 제거하려면 .off (http://api.jquery.com/off/) – MugiwaraUK

+0

그냥'$ (document) .off()'를 사용하십시오. 그리고 그게 다야. .on() (https://api.jquery.com/off/)에 첨부 된 모든 핸들러를 제거합니다. –

답변

1

jQuery의 on() 함수를 사용하면 자바 스크립트의 기본 addEventListener (사용 가능한 경우) 또는 attachEvent (없는 경우) (Internet Explorer 8 이하)를 사용하여 이벤트 처리기를 추가합니다. 이러한 이벤트 리스너는 jQuery 상태가 아닌 DOM 객체의 일부가됩니다. 따라서 jQuery 상태를 재설정하여 이벤트 핸들러를 제거하려는 사용자의 방법은 작동하지 않습니다.

관련 문제