gpt4 book ai didi

event-handling - $.event.trigger 未在非 DOM 对象中触发

转载 作者:行者123 更新时间:2023-12-03 22:39:45 26 4
gpt4 key购买 nike

var test = { }
$(test).on("testEvent", function (){
console.log("testEvent has fired");
});
$.event.trigger("testEvent");

我正在尝试使用 jQuery 来使用事件来执行发布/订阅机制。我需要能够将事件附加到非 DOM 对象,并能够让它们全部从单个全局触发器中触发。我期望上面的代码能够工作,但它并没有导致测试对象的 testEvent 触发。

请注意,将有多个对象将订阅事件。单个 $.event.trigger 应该触发所有这些事件。

请注意,此代码运行良好:

$('#someID').on("testEvent", function () {
console.log('testEvent has fired from DOM element');
})
$.event.trigger("testEvent");

最佳答案

经过一些研究,jQuery 1.7 似乎提供了一种引入发布/订阅机制的简单方法。 (找到 here )为了拥有发布/订阅机制,可以使用以下代码:

(function ($, window, undefined) {
var topics = {};

jQuery.Topic = function (id) {
var callbacks, method, topic = id && topics[id];
if (!topic) {
callbacks = jQuery.Callbacks();
topic = {
publish: callbacks.fire,
subscribe: callbacks.add,
unsubscribe: callbacks.remove
};
if (id) {
topics[id] = topic;
}
}
return topic;
};
})

为了订阅事件,需要完成以下操作:

$.Topic("message").subscribe(function () {
console.log("a publish has occurred");
});

为了发布消息,需要完成以下操作:

$.Topic( "message" ).publish(data);

“消息”是事件名称。数据参数包含您想要传递给订阅者的任何信息。

为了取消订阅,您必须传递已订阅的函数:

$.Topic( "message" ).unsubscribe(funcSubscribedToBefore);

关于event-handling - $.event.trigger 未在非 DOM 对象中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977486/

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