2016-09-27 2 views
1

사용자 상호 작용에 따라 가끔씩 메뉴를 다시 작성하는 객체를 만들려고합니다. 내가하고있는 방식은 새 메뉴 항목을 복제하고 오래된 메뉴 항목을 삭제하는 것입니다. 이것은 특정 클래스의 div 인스턴스를 새로 도입한다는 것을 의미합니다. 즉, 클래스에 영향을 미치는 jQuery를 다시로드해야 함을 의미합니다.jQuery가 작동하지 않는 동일한 obj의 메소드 호출

아래 예제에서 메뉴 항목을 클릭하면 "TypeError : this.objMethod가 함수가 아닙니다."가 표시됩니다.

어떻게 jQueryClick 메서드를 호출하여 objMethod를 호출 할 수 있습니까? 이 문제는 범위 문제라고 생각하지만 jQuery 함수 자체를 넘어서는 방법을 파악할 수는 없습니다.

function myObj(){ 
    this.jQueryClick = function(){ 
     $('.menu-item').click(function(){ 
      this.objMethod(); 
     }) 
    } 

    this.objMethod = function(){ 
     alert('hounds released'); 
    } 

    this.jQueryClick(); // will be called whenever the menu is rebuild 
} 

newObj = new myObj; 

이 같은 jQuery를 함께 외부 objMethod를 호출하는 경우 :

$('.menu-item').click(function(){ 
    newObj.objMethod(); 
}) 

그것은 작동하지만, 그 초기 메뉴 작동하고 다시 것하지 않을 때. 대한 jQuery

+1

이벤트를 동적 요소에 바인딩하는 방법을 배워야 할 것 같습니다 (['jQuery.on'] (http://api.jquery.com/on/) 참조) – Jamiec

+0

당신이 옳은 것처럼 보입니다! 객체 자체에 jQuery를 통합하는 것보다 훨씬 더 우아한 솔루션입니다. 감사합니다 챔피언 : O) –

+0

안녕하세요. 문제 없다. 죄송합니다 (다시 읽는 것에 대한) 내 의견은 약간 멍청했다. – Jamiec

답변

-1

당신이 JQuery와 통해 이벤트를 바인딩 할 때

this 

의 장소에

$(this) 

를 사용해야합니다.

.click() 메서드를 사용하여 바인딩 할 때 클릭 한 개체의 인스턴스를 찾을 수 있도록 $ (this)를 사용해야합니다.

0

문제는 this의 문맥이 ... var에에 this를 저장하여 범위를 해결하려고 클릭 리스너 내에서 다른 점이다 :

var t = this; 

t.jQueryClick = function(){ 
    $('.menu-item').click(function(){ 
     t.objMethod(); 
    }) 
} 

t.objMethod = function(){ 
    alert('hounds released'); 
} 

t.jQueryClick(); 
3

사용 $(document).on('click', '.menu-item',callback function); 그것 대신에. 재 구축시 루트 문서 객체에서 선택기 Everytime을 가져옵니다.

관련 문제