2012-08-28 5 views
0

내 개체/기능 범위 및 일반적인 이해에 문제가 있습니다. 그래서 같은 준비 문서에 jQuery를 함수를 호출하고 있습니다 :jQuery 네임 스페이스 및 "this"사용

$("#interactiveQA .actionTile").on('click',function(){ 
    $(this).activeTiles("init"); 
}); 

은 그때 그래서 여기에 같은 스크립트를 작성 :

여기
(function($) { 

    var methods = { 
     init: function() { 
      var tileClicked = $(this).attr('id'); 
     } 
    }; 

    $.fn.activeTiles = function(method) { 

     // Method calling logic 
     if (methods[method]) { 
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
     } else if (typeof method === 'object' || !method) { 
      return methods.init.apply(this, arguments); 
     } else { 
      $.error('Method ' + method + ' does not exist on jQuery.slider'); 
     } 
    }; 

})(jQuery); 

내가 알아 찾고 있어요 것입니다. 기술적으로 가능한 한 var tileClicked = $ (this) attr ('id')이 현재 위치에서 작동하지 않는 이유를 설명해주십시오. 다르게 또는 최선의 관행 등을 기술적으로 자세히 설명해주십시오.

+1

당신은'(이) $를 말은 ... 나는 그것이 당신의 문제를 해결할 수 있을지 모르겠지만, 나는 과거에 그것으로 문제가 없었어요 .attr ('id');', 맞죠? – David

+0

예, 질문을 업데이트했습니다. 그 typo는 내가 스택을 위해 다시 타이핑 한 것처럼 문제가되지 않는다. Q – Downpour046

+2

코드가 정상적으로 작동하는 것처럼 보인다 : http://jsfiddle.net/G4K7S/ – David

답변

5

오타 :

$(this).attr('id'); 

참고 .

+0

질문이 업데이트되었지만 스택이 해결되지 않았습니다. thx – Downpour046

0

경우 init 내부 this 어쩌면 당신이 $(this)을 사용해서는 안, 대신 간단하게 다음과 같이 this 쓰기, 이미 jQuery를 개체입니다 :

 init : function() { 
     var tileClicked = this.attr('id'); 
    } 
+0

비록 괜찮아요 jQuery 개체를 이중 포장하는 것입니다 – Ian

+0

내가 this.attr ('id') 나는 JS 오류와 충돌 - 잡히지 TypeError : Object # 'attr'메서드가 없습니다 – Downpour046

1

대개 어떻게 설정하려고합니까? 최대 플러그인의 생성자 :

$.fn.whatever = function (method) { 
    var args = arguments; 
    var argss = Array.prototype.slice.call(args, 1); 

    return this.each(function() { 
     $this = $(this); 
     if (methods[method]) { 
      methods[method].apply($this, argss); 
     } 
     else if (typeof method === "object" || !method) { 
      methods.init.apply($this, args); 
     } 
     else { 
      $.error("Method " + method + " does not exist on jQuery.whatever"); 
     } 
    }); 
}; 

+0

당신은 내게 코멘트를 던질 수 있습니다 또는 두 사람이 $ .fn을 작성하는이 방법을 선호하는 이유를 설명합니다. 감사합니다 - – Downpour046

+0

흠, 음, 솔직히'args'와'argss'를 구별하는 이유를 잊지 않고'return this.each (function() {}); '을 사용하면 원래 jQuery에서 여러 요소를 선택할 수 있습니다. 귀하의 플러그인을 가지고있는 모든 사람이 그들에게 적용됩니다. 예를 들어, "testing-class"클래스를 가진 모든 요소를 ​​선택하고 플러그인을 모두 (툴팁과 같이) 적용하려면,'$ (". testing-class") .testPlugin ({ "a": "b"});','return this.each'가 필요합니다. 말이 돼? 또한 jQuery에서 제공하는 연결 기능을 계속 사용할 수도 있습니다. – Ian

+0

예, 감사합니다. – Downpour046