6

すべてのアイテムを切り替えた後、カスタム関数を呼び出す必要があります。一人一人のためではありません。

アラートがあるとしましょう:

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

このようにコーディングすると、トグルするたびに for が呼び出されます。

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

私のはカスタムJS関数なので、どうすればこのようにできますか? この方法では機能しません:

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

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

4

3 に答える 3

8

メソッドを追加するには、jQueryを拡張する必要があります。あなたはこのようにそれを行うことができます:

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

その後、他のjQueryメソッドをチェーンできるようにする場合はthis、プラグインから戻る必要があります。

これが実際のです。


それが実際に何をするのかについてもう少し詳しく知りたい場合は、このまま読み進めてください。$.fnは単にのエイリアスです$.prototype。にプロパティを追加することで、prototypeすべてのjQueryインスタンスを効果的に拡張できます。

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

上で示したとおりに(ステートメントなしで)コードを使用するreturnと、jQueryメソッドへのそれ以上の呼び出しを連鎖させることができなくなります。メソッドからインスタンスを返すことにより、呼び出しは連鎖可能になります。

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

メソッド内ではthis、jQueryインスタンスを参照しているため、。への不要な呼び出しでラップする必要はありません$

于 2013-01-11T12:43:30.633 に答える
5

これはjQuery 1.6以降で使用できます...

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

$('div.myGroupOfItems').promise().done(function() {
    myAlert();
});
于 2013-01-11T12:46:15.043 に答える
4

その構文を使用するには、関数を次のようなjQueryプラグインにする必要があります。

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

$('div.myGroupOfItems').toggle('fast').myAlert();
于 2013-01-11T12:44:18.743 に答える