gpt4 book ai didi

javascript - 触发不同实例设置的 jQuery 自定义事件

转载 作者:行者123 更新时间:2023-11-28 01:50:37 26 4
gpt4 key购买 nike

有什么方法可以触发由不同 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');

虽然不是recommended要加载多个版本的库,一个简单的用例是一个插件,如果当前实例低于预期,则该插件会引入特定版本的 jQuery。有什么建议吗?

最佳答案

如果页面上有不同的实例(即使版本相同),您应该非常小心,因为这可能会导致意外行为并可能导致内存泄漏,例如如果您使用 jQuery191 删除一个元素,该元素具有使用 jQuery162 存储的数据(.data(...) 或事件监听器),这将保留在内存中,直到您重新加载页面,反之亦然。

回到你的问题。我不推荐它,但你可以将事件加倍(用两个版本触发它)。这种方法的问题在于它会减慢一切。另一个问题是有两个冒泡阶段。因此,如果您在 jQuery191 中阻止该事件,它仍会在 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
}
};

})();

(我希望代码可以这样工作。我很确定它应该可以工作,但我现在无法测试它)

关于javascript - 触发不同实例设置的 jQuery 自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19734838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com