你如何让JQuery等到上一个事件被触发

时间:2014-04-28 10:03:21

标签: javascript jquery html

我有一个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语句) 谢谢。

4 个答案:

答案 0 :(得分:1)

我认为以下示例可能会对您有所帮助。

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()

中写入

答案 1 :(得分:1)

使用布尔标志:(并修复代码)

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
    }
}

答案 2 :(得分:0)

我认为element.type会对您有所帮助,

<强> HTML

<input type="text" id="tipo-imovel" />

<强>脚本

$("#tipo-imovel").on("click change", function(event){
    alert(event.type + " is fired");
});

此代码将提醒已触发的事件

我建议您查看this possible events

如果有帮助,请告诉我

答案 3 :(得分:0)

这可能会有所帮助:jQuery queues。请在下面查看相关报价:

如何在此处使用jQuery队列

工作示例

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

该示例使用文本颜色更改,但可以轻松地进行任何AJAX调用。 setTimeout有一个类似于许多AJAX调用的异步回调,这个小提琴应该是一个有用的模板......

理论

$('#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();
  });
});

打破这个局面:

  1. 收听点击事件
  2. 点击特定元素
  3. 在&#39; myqueue&#39;上排队功能这个元素
  4. 要排队的函数可能需要引用这个元素 - 幸运的是jQuery用必需的元素调用它作为&#39; this&#39;指针。
  5. 如果您希望两个事件之间存在差距,您甚至可以将出队时间设置为window.setTimeout(500, function () { $this.dequeue(); });之类的超时,这会在下一个事件之前设置500毫秒...

    jQuery队列文档

      

    此功能类似于提供带回调函数   动画方法,但不要求给出回调   动画执行的时间。

    $( "#foo" ).slideUp(); $( "#foo" ).queue(function() {  
      alert( "Animation complete." );   
      $( this ).dequeue(); 
    }); 
    
      

    这相当于:

    $( "#foo" ).slideUp(function() {   
      alert( "Animation complete."
    ); }); 
    
      

    请注意,在使用.queue()添加函数时,我们应该这样做   确保最终调用.dequeue()以便下一个函数   在线执行。

    更新答案已被修改为包括一个工作小提琴和一些解释。