2

我添加自定义事件监听器

$(document).on('customEvent', function(e, message) {
   message = 'Hello world';
});

我在其他地方触发它:

var message = 'no message';
$(document).trigger('customEvent', message);
// I want here message to be `Hello world`

有什么方法可以获取更新的消息,而无需将其分配给某个全局变量?

我想用 jQuery创建类似WordPress 过滤器 API的东西。

4

2 回答 2

5

不传递消息字符串,而是传递消息对象,并将消息字符串作为成员。

$(document).on('customEvent', function(e, messageObj) {
   messageObj.messageStr= 'Hello world';
});

var messageObj = {'messageStr':'initial Message'};
$(document).trigger('customEvent', messageObj );

在触发器中,您更新对象的 messageStr 成员。你会有数据。

但是您需要确保您的代码不是异步的。唯一可以确保的方法是使用触发器的回调。

于 2013-02-22T18:26:49.207 回答
2

如果您的所有 JS 代码可以组合在一起,那么您可以使用这种方法:

(function() {
    $(document).on('customEvent', function(e, message) {
       sharedMessage = message;
    });
    ...
    var message = 'no message';
    $(document).trigger('customEvent', 'hello, world!');
}());

由于 javascript 变量是函数范围的,var因此该函数内部的任何变量都不是全局变量。如果没有,您可以创建自己的、不太可能发生冲突的命名空间:

var reallyunlikelytocollidenamespace = {};
reallyunlikelytocollidenamespace.message = 'no message';
...
于 2013-02-22T18:23:23.910 回答