4态按钮(带.toggle())和每个状态下延迟的Ajax
问题描述:
我有一个4状态按钮。我想知道如何延迟执行我的ajax请求,以便在最后只有一个请求...4态按钮(带.toggle())和每个状态下延迟的Ajax
我的意思是,如果我按下按钮两次,我不想执行第一个ajax请求,但只有第二个特定的超时后。
$('.btn_mark_erreur').toggle(
function(){
//State 1
var id_erreur = $(this).parent().attr('erreur_num');
$(this).attr('title','Erreur réglée');
$(this).children('img').attr('src','img/erreur_ok.png');
setTimeout(function(){
$.ajax({
type: 'POST',
url: "",
dataType: ($.browser.msie) ? "text" : "xml",
data: "a=maj_statut&data="+donnees ,
succes : function(data) {
console.log(data);}
});
},1000);
},
function(){
//State 2
var id_erreur = $(this).parent().attr('erreur_num');
$(this).attr('title','Erreur en cours');
$(this).children('img').attr('src','img/erreur_encours.png');
setTimeout(function(){
$.ajax({
type: 'POST',
url: "",
dataType: ($.browser.msie) ? "text" : "xml",
data: "a=maj_statut&data="+donnees ,
succes : function(data) {
console.log(data);}
});
},1000);
},
function(){
//State 3
var id_erreur = $(this).parent().attr('erreur_num');
$(this).attr('title','Problème sur cette erreur');
$(this).children('img').attr('src','img/erreur_nok.png');
setTimeout(function(){
$.ajax({
type: 'POST',
url: "",
dataType: ($.browser.msie) ? "text" : "xml",
data: "a=maj_statut&data="+donnees ,
succes : function(data) {
console.log(data);}
});
},1000);
},
function(){
//State 0
var id_erreur = $(this).parent().attr('erreur_num');
$(this).attr('title','Marquer comme...');
$(this).children('img').attr('src','img/erreur_statut.png');
setTimeout(function(){
$.ajax({
type: 'POST',
url: "",
dataType: ($.browser.msie) ? "text" : "xml",
data: "a=maj_statut&data="+donnees ,
succes : function(data) {
console.log(data);}
});
},1000);
}
);
此代码不起作用,我已收到每个州的请求。
感谢您的帮助!
答
setTimeout
返回值 - 定时器的标识符。您可以将该值传递给clearTimeout
以取消定时器。例如:
var timers = new Array(null, null, null, null);
function cancelRequestsUpTo(n) {
for (int i = 0; i <= n; ++i)
if (timers[i] != null) clearTimeout(timers[i]);
}
$("#btn_mark_error").toggle(function() {
//...
timers[0] = setTimeout(function() { $.ajax(...); }, 1000);
},
function() {
timers[1] = ...;
cancelRequestsUpTo(0);
},
....
);
注意,一旦$.ajax
实际执行也没办法(至少没有办法,我知道的),您可以取消已暂停的请求。我建议的只是取消你已经设置的定时器。
谢谢,我会尽力的! – Franquis 2010-10-07 13:30:02
完美的作品! – Franquis 2010-10-07 13:47:41