2013-05-05 148 views
3

由于某种原因,我的ajaxStop代码现在正在触发两次,我只需要将其限制为一次。让jquery ajaxStop每次只触发一次

$('.submit').bind('click', function(e) { 

$("#fileupload").ajaxForm({ 
     target: '#status' 
}).submit(); 


$(document).ajaxStop(function() { 
     var mysrc = $("#status").find('img').attr("src"); 
     $(".empty:first").removeClass("empty").removeClass("ui-state-default").addClass("ui-state").append('<img src="'+mysrc+'" width="45" height="60" class="expand"/>'); 
    });  

}); 
+0

ajaxStop已停止ajax请求,但是当我再次运行单击时,现在我又收到两个项目。 – Blynn 2013-05-05 05:19:50

回答

8

尝试使用.one(),如:

$(document).one("ajaxStop", function() { 
    var mysrc = $("#status").find('img').attr("src"); 
    $(".empty:first").removeClass("empty").removeClass("ui-state-default").addClass("ui-state").append('<img src="'+mysrc+'" width="45" height="60" class="expand"/>'); 
}); 
+1

这确实限制了它发射一次,但它在所有ajax呼叫完成之前触发。对我而言,无论如何... – 2013-08-14 22:43:21

+1

即使在拨打电话之前,这也是被叫的,所以这是一个错误的答案。 – 2017-01-11 14:31:48

0

矿正在执行两次为好。然而,使用.one意味着它只会在FIRST迭代中开启,而不是在所有事情完成之后。这是我最终使用的,它似乎按需要工作。

var ajaxCount = 0; 

$(document).ajaxStop(function() { 
    ajaxCount += 1; 
    if (ajaxCount == 2) { 
     $('.fieldLoading').hide(); 
     $('.fieldValue').show(); 
    } 
});