我添加了自定义事件监听器
$(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的东西。
答案 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';
...