侦听器之前的jQuery触发器
jQuery trigger before listener
使用$(document).ready();
,您可以在dom准备好后执行它,但它仍然会激发。
如何使自定义触发器以相同方式运行?
即
$(document).trigger("myEvent");
当页面加载时(在myEvent之前),我可能会延迟加载脚本,执行一些Ajax,当Ajax完成时(现在可能在myEvent之后),我会在Ajax回调中放置一个监听器,以确保myEvent在我继续之前发生(就像您可能对$(document).ready()所做的那样)
$(document).on("myEvent", function(){ ... });
但很明显,这不会触发,因为它是在听众就位之前触发的。
在被绑定之前触发事件当然不会有任何效果。
只有在附加了一些处理程序之后才应该触发它,否则不会触发任何内容。关于就绪事件,jQuery使用了一个延迟对象,即"readyList"对象。但我敢肯定,对于您正在寻找的内容来说,它只是太大了,而且无论如何,它仍然会根据其他事件而触发,DOMContentLoaded或onreadystatechange或窗口对象的onload,或者如果这些事件已经完成,则使用超时手动解决。
所以,为什么不在绑定后触发事件呢?经典的方法是:
$(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.应该有更好的方法。
相关文章:
- jQuery触发器点击未从AJAX成功工作
- jQuery触发器事件在一个循环中多次出现
- jquery触发器可以从点击开始工作,但没有准备好
- 从 blob 加载视频预览时的 Jquery 触发器函数
- 更改多个选择选项后的jQuery触发器事件
- jQuery触发器触发点击事件,但不发送事件数据
- 为什么这个jQuery触发器不起作用
- 如何检测jQuery触发器事件完成
- 浏览器兼容性jquery触发器
- jQuery触发器点击与点击()
- jQuery - 触发器不产生预期的结果
- JQuery 触发器单击事件不起作用
- jQuery触发器未按预期工作
- jQuery - 触发器功能使我的页面不停地重新加载
- 按键时 Jquery 触发器
- JQuery 触发器元素本身在绑定中
- jQuery:触发器不会在加载了 .load() 的元素上触发
- typed.js jQuery 触发器在键入过程中不起作用
- 为什么获胜'我的jQuery触发器工作
- 将jQuery触发器中的事件参数发送到iframe