javascript - 监听器之前的 jQuery 触发器

标签 javascript jquery triggers

使用 $(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
    }
}); 

DEMO

如果你想使用你的 ajax 方法返回的 promise 接口(interface),使用类似的东西:

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

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

关于javascript - 监听器之前的 jQuery 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876255/

相关文章:

javascript - Firebug 扩展 context.sourceCache.load(href) 返回 'Reload the page to get source for: http://'

javascript - 在 Vue.js 中,计算属性未使用 navigator.onLine 更新

javascript - 对 Tumblr 的 API 调用没有回调

JQuery - 从子级确定父级索引

postgresql - Postgres 触发器适用于 INSERT,不适用于 DELETE

javascript - 无法使用 Selenium webdriver、python 在 <span> 标记内模拟 onclick javascript

jquery数据表导出到excel

javascript - 单击社交媒体图标(Font Awesome)不重定向到 href

java - "good"触发连接 "chambers"功能的方法是什么(Java)

c# - 如何使用触发器在 Setter Value 属性上绑定(bind)另一个控件?