簡體   English   中英

觸發由不同實例設置的jQuery自定義事件

[英]Trigger a jQuery custom event set by different instance

有什么方法可以觸發由其他jQuery實例設置的自定義事件? 例如:

// Load version 1.9.1
...
jQuery191(document).on('customEvent', function () {console.log('Callback fired.')});

// Load version 1.6.2 and setup noConflict
...
jQuery162(document).trigger('customEvent');

雖然不建議加載庫的多個版本,但是一個簡單的用例是一個插件,如果當前實例的值低於預期,則該插件可插入特定版本的jQuery。 有什么建議么?

你真的應該照顧,如果你在頁面上有不同的實例(即使相同的版本),因為這可能會導致意外的行為,並可能導致內存泄漏,例如,如果您刪除與元素jQuery191有數據( .data(...)或已存儲與事件偵聽器) jQuery162這將保留在內存中,直到你重新加載頁面和其他方式輪。

但是回到您的問題。 我不推薦這樣做,但您可以將事件加倍(在兩個版本中都觸發它)。 這種方法的問題在於它將減慢一切。 另一個問題是您有兩個冒泡階段。 因此,如果您在jQuery191阻止該事件,則該事件仍將在jQuery162執行, jQuery162

因此,這可能是一種適合您的解決方案,但也可能使情況變得更糟。 因此,您需要檢查自己是否可以使用此解決方案。 可能您也可以刪除其中一個加倍部分。

(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
        }
    };

})();

(我希望代碼能這樣工作。我很確定它應該工作,但是現在無法測試)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM