2013-01-11 5 views
5

すべてのアイテムを切り替えた後にカスタム関数を呼び出す必要があります。それぞれではありません。jQueryカスタム関数を連結

我々は警戒を考えてみましょう:

function myAlert() { alert("OK"); } 

私はこのようにコーディングした場合、それがトグルするたびに、呼び出します:鉱山があるので、

$('div.myGroupOfItems').toggle('fast',function() { 
myAlert(); 
}); 

は、どのように私は、このようにそれを行うことができますカスタムJS関数?この方法では動作しません:

$('div.myGroupOfItems').toggle('fast').myAlert(); 

または他のソリューション?

+0

これを使用することができます。 –

答えて

5

あなたが追加するには...以降のjQuery 1.6から

$('div.myGroupOfItems').toggle('fast'); 

$('div.myGroupOfItems').promise().done(function() { 
    myAlert(); 
}); 
8

jQueryを拡張してメソッドを追加する必要があります。あなたはその後チェーン他のjQueryメソッドにできるようにしたい場合は、プラグインからthisを返す必要が

$.fn.myAlert = function() { 
    alert("OK"); 
}; 

を:あなたはこのようにそれを行うことができます。

ここにはworking exampleがあります。


実際に何がより詳細に関心があるのか​​をお読みください。 $.fnは、単に$.prototypeの別名です。 prototypeにプロパティを追加すると、すべてのjQueryインスタンスを効果的に拡張できます。

$を呼び出すと、jQueryは内部的にインスタンスを作成します(たとえば、new演算子を使用してインスタンスを手動で作成する必要はありません)。 $.prototypeを拡張したので、すべてのインスタンスが新しいメソッドにアクセスできるようになります。

上記のように(returnステートメントなしで)コードを使用すると、jQueryメソッドへの呼び出しをチェーンすることができなくなります。メソッドからインスタンスを返すことによって、呼び出しがチェーン可能になります。

$.fn.myAlert = function() { 
    alert("OK"); 
    return this; 
}; 

注メソッドの内部で、thisはjQueryのインスタンスを参照し、その$への不必要な呼び出しでそれをラップする必要はありませんことを。

+0

カスタムjquery関数についてのすべてではありません...トグル関数がassyncで実行されるため、これは使用できません。すべてが完了する前に警告することを意味します。 – VDP

+0

@VDP - ああ、良い点。その場合、OP、ATOzTOAの答えを見てください。 2つの組み合わせが必要な場合は、jQueryオブジェクトへの参照をキャッシュし、コールバックの内部から 'myAlert'を呼び出します。 –

+0

私はATOzTOAの答えを試してみるつもりですが、あなたのコードを使った後でウィンドウの読み込みのように直接関数を呼び出すことはできますか?この方法は動作しません。$ .myAlert() –

4

あなたは、このようなjQueryプラグインの中にあなたの関数を作成する必要があり、その構文を使用するには:

$.fn.extend({   
    myAlert: function() { 
     alert('OK'); 
     return this; // return the assigned elements to continue chaining. 
    } 
}); 

$('div.myGroupOfItems').toggle('fast').myAlert(); 
+0

'return $(this);'、いいえ? – jeremy

+3

@Nile - 'fn'は' prototype'のエイリアスなので、 'this'はjQueryインスタンスを参照します。 –

+0

@JamesAllardiceああ、大丈夫です。 – jeremy

関連する問題