jQuery触发器之前的触发器

时间:2013-07-26 08:13:17

标签: javascript jquery triggers

使用$(document).ready();,您可以在dom准备就绪后执行它,但它仍会触发。

如何让自定义触发器以相同的方式运行?

即。

$(document).trigger("myEvent");

当页面加载时(在myEvent之前),我可能会延迟加载脚本,执行一些Ajax,当Ajax完成时(现在可能在myEvent之后),我会在Ajax回调中放置一个监听器以确保myEvent就像我继续前一样(就像你可能用$(文件).ready())

$(document).on("myEvent", function(){ ... });

但显然这不会触发,因为它是在听众到位之前触发的。

1 个答案:

答案 0 :(得分:0)

触发事件之前绑定它当然不会有效。

只有在连接了一些处理程序后才能触发它,否则不会触发任何内容。 关于ready事件,jQuery使用延迟对象,即“readyList”对象。但是我非常确定它只是超出了你正在寻找的东西,无论如何,这仍然会依赖于其他事件,DOMContentLoaded或onreadystatechange或onload of window对象,或者如果这些事件已经完成则使用超时手动解决。

那么为什么一旦绑定它就不会触发事件,这是一种经典的方式:

$(document).on("myEvent", function(){ /**/ }).trigger('myEvent');

如果出于某种原因你想在特定情况下解雇它,并且由于出于阻碍原因你不能修改ajax回调方法以检查某些条件,你仍然可以使用ajaxStop()处理程序,类似:

$(document).ajaxStop(function () {
    if ($._data(document, 'events').myEvent) {
        $(this).trigger('myEvent').off('ajaxStop'); //off() could be removed, depending your needs
    }
}); 

DEMO

如果要使用ajax方法返回的promise接口,请使用以下内容:

$.when($.get('myajax')).done(function(){$(document).trigger('myEvent')});

但实际上,你没有告诉我们你在寻找什么,也许你的逻辑在其他地方失败了,IMO应该有更好的方法。