如何让JQuery等待上一个事件触发
How do you get JQuery to wait until a previous event has fired
我有一个div列表,每当我点击它们时,我都会调用一个函数,一些函数会触发其他ajax函数。现在,虽然单击甚至会触发一个ajax事件,但如果我单击另一个div,我会得到调用的最后一个单击div函数。如何解决这个问题。
document.addEventListener("click",function(event){
checkparent(event);
}
function checkpaternt(event){
if(($(event.target).class=="checkparent"){//call ajax functions
}
else {//call local functions}
稍后我检查目标的类名,并调用不同的函数。更多信息(有很多div元素和if-else语句)非常感谢。
使用布尔标志:(并修复代码)
function checkparent(event) {
if (ajaxRequestOn) return;
if (event.target.className == "checkparent") {
ajaxRequestOn = true;
//call ajax functions
$.ajax( /* ...*/ ).always(function () {
ajaxRequestOn = false;
});
} else {
//call local functions
}
}
我认为下面的例子可能会对您有所帮助。
callbacks = [$.Deferred(), $.Deferred()];
obj1.on('click', callbacks[0].resolve);
obj2.on('click', callbacks[1].resolve);
$.when(callbacks).done(function() { console.log('After to events done'); });
这里我正在创建两个延迟对象。
每个事件解析一个延迟对象。
当这些所有延迟的对象将在下一个函数中被解析时,您可以在.done()
中写入
我认为element.type
会帮助你,
HTML
<input type="text" id="tipo-imovel" />
脚本
$("#tipo-imovel").on("click change", function(event){
alert(event.type + " is fired");
});
此代码将提醒触发了哪个事件
我建议你看看这个可能的事件
请告诉我它是否对您有帮助
这可能会有所帮助:jQuery队列。请继续下面的相关报价:
如何在此处使用jQuery队列
工作示例
这是一个关于使用队列进行自定义ajax调用的惊人资源。我知道SO对存档链接内容的偏好,但我真的不能在这里复制代码,所以我还做了一个显示自定义队列的小把戏——这里是
该示例使用文本颜色更改,但可以很容易地进行任何AJAX调用。setTimeout
有一个类似于许多AJAX调用的异步回调,这个fiddle应该是一个有用的模板。。。
理论
$('#elementId').click(function (e) {
var $element = $(e.currenttarget);
$element.queue('myqueue', function () {
var $el = $(this);
//Do stuff on $el
//Remove this event from the queue and process next...
$el.dequeue();
});
});
细分:
- 收听点击事件
- 单击特定元素
- 在此元素的"myqueue"上对函数进行排队
- 要排队的函数可能需要对该元素的引用——幸运的是,jQuery使用所需的元素作为"this"指针来调用它
如果你希望两个事件之间有一个间隔,你甚至可以把出列放在一个超时内,比如window.setTimeout(500, function () { $this.dequeue(); });
,它在下一个事件之前设置500毫秒的间隔。。。
jQuery队列文档
此功能类似于使用animation方法,但不需要在执行动画的时间。
$( "#foo" ).slideUp(); $( "#foo" ).queue(function() {
alert( "Animation complete." );
$( this ).dequeue();
});
这相当于:
$( "#foo" ).slideUp(function() {
alert( "Animation complete."
); });
请注意,当使用.requeue()添加函数时,我们应该确保最终调用.dequeue(),以便下一个函数行中执行。
更新答案已被修改,包括一个工作小提琴和一些解释。
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 使用另一个模板上的单击事件从一个模板传递数据
- jQuery UI 选项卡取消选择事件或在选择时保存上一个选项卡
- 单击标记时更改标记图标(在单击事件上),并在单击另一个标记时将其恢复为普通图标
- 如果我在 window.onbeforeunload 事件上确认是,我如何调用另一个 Java 脚本函数
- 客户端始终响应上一个服务器发送的事件,而不是当前事件
- CasperJs then() 是否等待上一个函数中发出的事件
- 按 F5 或页面上的刷新按钮不应调用上一个事件
- event.cyTarget 坚持上一个事件
- 在其他元素的滚动事件上删除更新一个元素的scrolltop/scrollleft的延迟
- 如何使一个元素在任何和所有事件上触发一个函数
- HTML5:如何在iOS中获得本地播放器上一个和下一个按钮事件
- 在javascript事件上预加载一个文件,然后再显示它
- 在执行上一个的处理程序之前检查下一个事件以隐藏自动完成
- 如何触发一个事件上的元素在聚合物
- 如何将数据从一个控制器传递到服务,并在同一事件上访问其他控制器上的数据
- 在javascript中另一个Telerik日期picker的onChange事件上设置Telerik日期picker的
- 有2个谷歌分析事件在一个页面上发射,我想只有一个分析在该页面上发射
- 我正在尝试使用java脚本存储click事件上的列表项,并将其访问到另一个页面进行sql查询,但我做不到
- 重定向或呈现事件上的另一个视图