1

別の jQuery インスタンスによって設定されたカスタム イベントをトリガーする方法はありますか? 例えば:

// バージョン 1.9.1 をロード
...
jQuery191(document).on('customEvent', function () {console.log('コールバックが発生しました。')});

// バージョン 1.6.2 をロードし、noConflict を設定します
...
jQuery162(document).trigger('customEvent');

ライブラリの複数のバージョンをロードすることはお勧めしませんが、単純なユースケースは、現在のインスタンスが予想よりも低い場合に特定のバージョンの jQuery を取り込むプラグインです。助言がありますか?

4

1 に答える 1

1

ページに異なるインスタンス (同じバージョンであっても) がある場合は、特に注意する必要があります。たとえば、jQuery191データ (.data(...)またはイベント リスナー)を持つ要素を削除した場合など、予期しない動作が発生し、メモリ リークが発生する可能性があるためです。これで保存されjQuery162たページは、ページをリロードするまでメモリに残り、その逆も同様です。

しかし、あなたの質問に戻ります。お勧めしませんが、イベントを 2 倍にすることができます (両方のバージョンでトリガーします)。このアプローチの問題は、すべてが遅くなることです。もう 1 つの問題は、2 つのバブリング フェーズがあることです。そのため、イベントを防止しても、そのイベントjQuery191 は引き続き実行されjQuery162、その逆も実行されます。

したがって、それはあなたにとって有効な解決策かもしれませんが、事態を悪化させる可能性もあります. したがって、このソリューションが使用できるものであるかどうかを自分で確認する必要があります。おそらく、ダブリング パーツの 1 つを削除することもできます。

(function() {
    //keep the original functions
    var trigger191 = jQuery191.fn.trigger;
    var trigger162 = jQuery162.fn.trigger;

    jQuery191.fn.trigger = function( evt ) {
        trigger191.apply(this,arguments); //call orginal function

        //only double certain events
        if( evt == "my-custom-event" ) {
            var resultset162 = jQuery162(jQuery191.makeArray( this ));//create a ne result set of the 162 version
            trigger162.apply(resultset162,arguments); //call the original function of 162 to avoid an endless loop
        }
    };

    jQuery162.fn.trigger = function(evt) {
        trigger162.apply(this,arguments); //call orginal function

        //only double certain events
        if( evt == "my-custom-event" ) {
            var resultset191 = jQuery191(trigger162.makeArray( this ));
            trigger191.apply(resultset191,arguments); //call the ofiginal function of 191 to avoid an endless loop
        }
    };

})();

(コードがそのように機能することを願っています。うまくいくはずですが、今はテストできません)

于 2013-11-01T20:54:18.170 に答える