Javascript 如何让JQuery等到触发了前一个事件

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

我有一个div列表,每当我单击它们时,我调用一个函数,其中一些会触发其他ajax函数。 现在,当click偶数触发一个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语句)
谢谢。

我想
元素。键入
会对您有所帮助

HTML

<input type="text" id="tipo-imovel" />
此代码将警告已触发的事件

我建议你看看

请让我知道它是否对您有帮助

这可能会有帮助:。有关相关报价,请参见下文:

这里如何使用jQuery队列

工作示例

是一个关于使用队列进行自定义ajax调用的惊人资源。我知道归档链接内容的偏好,但我不能在这里复制代码,所以我还做了一个小提琴来显示自定义队列-

该示例使用文本颜色更改,但这可以很容易地用于任何AJAX调用。
setTimeout
有一个类似于许多AJAX调用的异步回调,这个fiddle应该是一个有用的模板

理论

分解如下:

  • 收听单击事件
  • 单击特定元素
  • 将此元素的“myqueue”上的函数排队
  • 要排队的函数可能需要对此元素的引用—幸运的是,jQuery使用所需元素作为“this”指针调用它
  • 如果希望两个事件之间有一个间隔,甚至可以将出列放在超时内,如
    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
        }
    }