Javascript 如何让JQuery等到触发了前一个事件
我有一个div列表,每当我单击它们时,我调用一个函数,其中一些会触发其他ajax函数。 现在,当click偶数触发一个ajax事件时,如果我单击另一个div,就会调用上次单击的div函数。如何解决这个问题Javascript 如何让JQuery等到触发了前一个事件,javascript,jquery,html,Javascript,Jquery,Html,我有一个div列表,每当我单击它们时,我调用一个函数,其中一些会触发其他ajax函数。 现在,当click偶数触发一个ajax事件时,如果我单击另一个div,就会调用上次单击的div函数。如何解决这个问题 document.addEventListener("click",function(event){ checkparent(event); } function checkpaternt(event){ if(($(event.targ
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语句)
谢谢。我想
元素。键入
会对您有所帮助
HTML
<input type="text" id="tipo-imovel" />
此代码将警告已触发的事件
我建议你看看
请让我知道它是否对您有帮助这可能会有帮助:。有关相关报价,请参见下文:
这里如何使用jQuery队列
工作示例
是一个关于使用队列进行自定义ajax调用的惊人资源。我知道归档链接内容的偏好,但我不能在这里复制代码,所以我还做了一个小提琴来显示自定义队列-
该示例使用文本颜色更改,但这可以很容易地用于任何AJAX调用。setTimeout
有一个类似于许多AJAX调用的异步回调,这个fiddle应该是一个有用的模板
理论
分解如下:
window.setTimeout(500,function(){$this.dequeue();})代码>,设置下一个事件前500毫秒的间隔
jQuery队列文档
此功能类似于使用
动画方法,但不要求在
执行动画的时间
这相当于:
请注意,在使用.queue()添加函数时,我们应该
确保最终调用.dequeue(),以便下一个函数
在线执行
更新答案已修改为包含一把小提琴和一些解释。我认为以下示例可能会对您有所帮助
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()
内部编写:(并修复代码)
.live已弃用,更好地使用.on()live不仅已弃用,而且已从jQuery 1.9+中删除。有很多DIV,因此实际上我无法编写这么多的单击事件。感谢您提供的信息,请在ajax请求完成之前禁用其他DIV单击。您可以使用任何布尔标志来检查it@A.Wolff如何禁用DIV您不能,我说的是根据任何布尔标志在DIV的click处理程序中进行过滤。你必须将你的逻辑设置为“标题”中的“平均值”来检查标志,你如何使用它来处理事件?有很多div,所以实际上我无法编写那些点击事件。不过,谢谢你提供的信息
$('#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();
});
});
$( "#foo" ).slideUp(); $( "#foo" ).queue(function() {
alert( "Animation complete." );
$( this ).dequeue();
});
$( "#foo" ).slideUp(function() {
alert( "Animation complete."
); });
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'); });
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
}
}