使用 $(document).ready();
你可以在 dom 准备好后执行它,但它仍然会触发。
如何让自定义触发器以相同的方式运行?
即
$(document).trigger("myEvent");
在加载页面时(在 myEvent 之前),我可能会延迟加载脚本,执行一些 Ajax,当 Ajax 完成时(现在可能在 myEvent 之后),我会在 Ajax 回调中放置一个监听器以确保 myEvent正如我继续之前发生的那样(就像你可能对 $(document).ready() 所做的那样)
$(document).on("myEvent", function(){ ... });
但显然这不会触发,因为它是在监听器到位之前触发的。
最佳答案
在 绑定(bind)之前触发事件当然不会有任何效果。
你应该只在一些处理程序附加到它之后触发它,否则什么都不会被触发。 关于就绪事件,jQuery 为此使用了一个延迟对象,即“readyList”对象。但我很确定它对于你正在寻找的东西来说太大了,无论如何它仍然会被触发,这取决于其他事件,DOMContentLoaded 或 onreadystatechange 或窗口对象的加载或者如果这些事件已经完成则使用超时手动解决。
那么为什么不在绑定(bind)事件后触发事件呢,经典的方式:
$(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 接口(interface),使用类似的东西:
$.when($.get('myajax')).done(function(){$(document).trigger('myEvent')});
但实际上,您没有告诉我们您在寻找什么,也许您的逻辑在其他地方失败了,IMO 应该有更好的方法。
关于javascript - 监听器之前的 jQuery 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876255/