我刚刚看到了两个javascript文件:
第一个在成功的Ajax调用后调用了以下线路:
$(document).trigger("locationloaded");
第二个 js 有:
$(document).on('locationloaded', function () {
//few lines of code here
});
对JS来说有点陌生,只是想知道,通过触发器调用位置加载有什么正当理由吗?为什么我们不能有简单的函数作为 locationloaded() 从第一个 js 调用?如果两者都做相同的工作,应该使用哪一个?
事件声明
on
注册一个事件;在本例中为locationloaded
。由于locationloaded
是自定义事件,触发事件的唯一方法是通过trigger
方法。
注册事件customevent
并附加函数locationloaded
$(document).on('customevent', locationloaded);
function locationloaded() {
console.log('The custom event is triggered inside the "locationlaoded" function');
}
触发事件:customevent
$(document).trigger("customevent");
反过来,记录消息The custom event is triggered inside the "locationlaoded" function
使用trigger
vs 直接调用函数;即locationloaded()
使用trigger
向DOM广播一条消息,指出事件已触发。因此,任何侦听事件的单独javascript文件都会立即通知
$(document).trigger('subscribe');
与$(document).trigger('subscribe')
位于同一文件
$(document).on('subscribe', function() {
// Send email
});
在另一个 JavaScript 文件上
$(document).on('subscribe', function() {
// Save data
});
而直接调用声明的函数只允许在所调用方法的同一上下文中执行任何其他任务。
这就是为什么在单独的文件中声明$(document).trigger('locationloaded
)'的原因,同时如果事件被触发和广播,那么另一个文件可以执行其任务。
根据 jQuery 触发器的文档
当发生相应的事件时,将触发与.on()
或其快捷方式方法之一附加的任何事件处理程序。但是,可以使用.trigger()
方法手动触发它们。