2012-12-22 3 views
0

플러그인에서 연쇄 함수 중 하나에 액세스하려면 어떻게해야합니까?플러그인에서 연결 기능 중 하나에 액세스하는 방법은 무엇입니까?

이것은 내 플러그인으로 문서에 첨부 된 요소를 반환해야합니다.

(function($){ 

     $.fn.extend({ 

      selection: function(options) { 

       var defaults = { 
        element:  "selection" 
       } 

       var options = $.extend(defaults, options); 
       var o = options; 

       var $this = this; 


       $this.function_1 = function(object) 
       { 
        alert('function 1'); 

       } 

       $this.function_2 = function(object) 
       { 
        alert('function 2'); 
       } 

       $(document.body).append("<div class='element'>Loading</div>"); 

       var element = $('.element'); 

       return element; 

      } 
     }); 

    })(jQuery);​ 

버튼을 클릭하면 '기능 2'에 경고하지만 Firefox에서는 오류를 반환합니다.

다음

내 jsffiddle이며,

http://jsfiddle.net/dm3ft/

답변

1

한 가지 방법이다 사용할 수 있습니다 . 기본은 jQuery plugin authoring docs에서 가져옵니다 : 다음

(function($) { 

    var methods = { 
     function_1: function(object) { 
      alert('function 1'); 
     }, 
     function_2: function(object) { 
      alert('function 2'); 
     } 
    }; 


$.fn.selection = function(method, options) { 

    return this.each(function(){ 

     $(this).click(function() { 

       // 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.tooltip'); 
       } 
      }); 
    }); 

})(jQuery); 

은 플러그인 방식 전화 :

$('.chain-function').selection('function_2'/* optional options object*/); 

DEMO : http://jsfiddle.net/dm3ft/1/

참고 : 당신이 플러그인 기능 내부 this는 DOM는 것을 깨닫게하는 것이 중요합니다 요소와 혼동하지 말고 이 수업에 포함됩니다.

+0

감사합니다. 내 플러그인의 문제는'click' 또는 각'event'가 없다는 것입니다 ... – laukok

+1

'click' 저는 이해합니다 ... "clcik here"라고 말한 후 방금'click'을 사용했습니다. 'each'는 DOM에 여러 요소가있는 선택기에서 플러그인을 호출한다고 가정하고 요소의 전체 모음을 반복하는 데 사용됩니다. 'click'을 원하지 않는다면, 그것을 제거하고 핸들러 내에서 코드를 사용하십시오. – charlietfl

+0

콜렉션에 하나의 요소 만 있다면'each'는 상관 없습니다 (또는 실패) – charlietfl

0

또한 문자열로 방법을 전달하는 플러그인 함수에 인수를 추가 jQuery.fn

$(document).ready(function(){ 

    $('.chain-function').function_2(); 

}); 

(function($){ 

    $.fn.function_2 = function(object){ 

     alert("yay!"); 
     var element = $("<div />").addClass("element").text("Loading"); 
     element.appendTo( $(document.body)); 
     return element; 

    }; 

})(jQuery);​