2012-11-25 9 views
7
(function($) { 
    $.fn.top_islides = function(){ 
     var ajax_init = function(){ 
      init_islides(); 
      setTimeout(function(){picmove()},300); 
     }; 
//..... 
    }; 
})(jQuery); 

が、私はそれが動作するはずと思っ jqueryプラグインで関数を呼び出す方法は?

$('#top_slides').top_islides(); 
$('#top_slides').top_islides().ajax_init(); 

別のファイルに準備doucumentでそれを、私はエラーを得呼び出し、問題は何ですか?

答えて

5

はこのようにそれを実行します。

(function($) { 
    //Assuming $.fn.top_islides is defined 
    $.fn.top_islides.ajax_init = function(){ 
     init_islides(); 
     setTimeout(picmove,300); 
    }; 
//..... 
})(jQuery); 

それとも

(function($) { 
    $.fn.top_islides = function(){ 
     var ajax_init = function(){ 
      init_islides(); 
      setTimeout(picmove,300); 
     }; 
     return { 
      ajax_init: ajax_init 
     }; 
    }); 
    //..... 
})(jQuery); 
+1

大丈夫私はあなたのコードのおかげで作品を得た – FatDogMark

3

以下の例のように、このような何かを試してください: -

<script type="text/javascript"> 


    $.someplugin = { 
     CallMe : function() { 
      alert("You called?"); 
     }, 
     otherstuff : function() { alert("other stuff!"); } 
    }; 


    $.someplugin.CallMe(); 
    $.someplugin.otherstuff(); 
</script> 
+0

私は\t ajax_initに変更しました(); \t \t \t setTimeout(function(){picmove()}、300); \t \t};しかし、エラーSyntaxErrorを言う:関数ステートメントは、名前が必要です – FatDogMark

0

関数内でvarを使用して、それを要素を「プライベート」にします。真のクラス構造はJavascriptには来ないが、それはJavascriptの仕事で可視性を作るためのハッキリな方法だ。 あなたが

(function($) { 
    $.fn.top_islides = function(){ 
    var ajax_init = function(){ 
     init_islides(); 
     setTimeout(function(){picmove()},300); 
    }; 
    return { 
     'ajax_init': ajax_init 
    }; 
    //..... 
    }; 
})(jQuery); 

または

(function($) { 
    $.fn.top_islides = function(){ 
    //..... 
    }; 
    $.fn.top_islides.prototype.ajax_init = function(){ 
    init_islides(); 
    setTimeout(function(){picmove()},300); 
    } 
})(jQuery); 

をあなたの関数のプロトタイプに設定するか、またはオブジェクトを返す必要がありますが上がらないので、あなたのケースでは、あなたが「、プロトタイプを使用されることはありません新しいtop_islidesオブジェクトをインスタンス化するのではなく、jQueryを通じてアクセスするので、最初のオプションが最善の策です。

+0

あなたは戻って値を呼び出す方法を理解していない、 – FatDogMark

+0

'return'はその名前の意味で、関数から何かを返します。複数の値を返す場合は、オブジェクトを使用し、各戻り要素に名前を付ける必要があります。あなたは変数、関数、または他のオブジェクトを返すことができ、 '$( 'element')、top_islides()。funct()'または '$( 'element')。top_islides() $( 'element')。top_islides()。obj.property() ' – pocesar

0

イモ、最良のソリューションは、連鎖可能なプラグインシステムを維持できるので、よりクリーンなトリガーが使用されます。

あなたは、外部からのプラグインの宣言とトリガーでイベントハンドラを宣言することができます。

(function($) { 
    $.fn.top_islides = function(){ 
    this.on ('init_islides', function(){ 
     setTimeout(function(){picmove()},300); 
    }; 
    //..... 
    }; 
})(jQuery); 
$("button").click(function() { 
    $("p").trigger("init_islides"); 
}); 

DOCは、ここで見つけることができます。function(){ \t \t \t init_islides:http://api.jquery.com/on/