使用$(document).ready();
,您可以在dom准备就绪后执行它,但它仍会触发。
如何让自定义触发器以相同的方式运行?
即。
$(document).trigger("myEvent");
当页面加载时(在myEvent之前),我可能会延迟加载脚本,执行一些Ajax,当Ajax完成时(现在可能在myEvent之后),我会在Ajax回调中放置一个监听器以确保myEvent就像我继续前一样(就像你可能用$(文件).ready())
$(document).on("myEvent", function(){ ... });
但显然这不会触发,因为它是在听众到位之前触发的。
答案 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
}
});
如果要使用ajax方法返回的promise接口,请使用以下内容:
$.when($.get('myajax')).done(function(){$(document).trigger('myEvent')});
但实际上,你没有告诉我们你在寻找什么,也许你的逻辑在其他地方失败了,IMO应该有更好的方法。