修改功能参数

时间:2013-02-22 18:18:11

标签: javascript jquery

我添加了自定义事件监听器

$(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 filter API的东西。

2 个答案:

答案 0 :(得分:5)

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

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

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

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

但是你需要确保你的代码不是异步的。保险的唯一方法是使用触发器回拨。

答案 1 :(得分: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';
...