我正在尝试做下一件事:当第一部分完成时(包括从服务器获取详细信息的函数AccountClicked
),启动第二部分。
我该怎么办呢?
// first part
$('#accountsTable li input').each(function () {
isGetLastSearchOperation = true;
var accountId = $(this).attr('id');
if ($.inArray(accountId, LastSearchedAccountsIds) > -1) {
AreClickedButtonsEnable = true;
$(this).attr('checked', true);
AccountClicked(this);
}
// uncheck the other goals
else {
$(this).attr('checked', false);
}
});
// second part
$('#commercialGoalsTable li input').each(function () {
isGetLastSearchOperation = true;
var goalId = $(this).attr('id');
if ($.inArray(goalId, LastSearchedGoalsIds) > -1) {
AreClickedButtonsEnable = true;
$(this).attr('checked', true);
//CommercialGoalClicked(this);
}
// uncheck the other goals
else {
$(this).attr('checked', false);
}
});
任何帮助表示赞赏!
答案 0 :(得分:3)
最好的解决方案可能是更改代码,以便发送一个ajax请求。
由于AccountClicked()
使用ajax并且是异步的,我首先会更改该函数以返回promise
对象,然后等待所有的promise都像这样解决:
var promises = [];
// first part
$('#accountsTable li input').each(function () {
isGetLastSearchOperation = true;
var accountId = $(this).attr('id');
if ($.inArray(accountId, LastSearchedAccountsIds) > -1) {
AreClickedButtonsEnable = true;
$(this).attr('checked', true);
promises.push(AccountClicked(this));
}
// uncheck the other goals
else {
$(this).attr('checked', false);
}
});
$.when.apply(null, promises).done(function () {
// second part
$('#commercialGoalsTable li input').each(function () {
isGetLastSearchOperation = true;
var goalId = $(this).attr('id');
if ($.inArray(goalId, LastSearchedGoalsIds) > -1) {
AreClickedButtonsEnable = true;
$(this).attr('checked', true);
//CommercialGoalClicked(this);
}
// uncheck the other goals
else {
$(this).attr('checked', false);
}
});
});
从函数返回promise的几个简单选项:
function AccountClicked() {
return $.ajax({
// ...
});
}
function AccountClicked() {
var def = $.Deferred();
$.ajax({
// ...
}).done(function() {
def.resolve();
});
return def.promise();
}
答案 1 :(得分:0)
你可以在第一个每个循环的末尾添加一个if
语句,找到元素的数量,当它达到那个高数字时,开始下一个循环。
// first part
var numElem = $('#accountsTable li input').length;
$('#accountsTable li input').each(function (e) {//Notice the 'e' in this function for your index number
isGetLastSearchOperation = true;
var accountId = $(this).attr('id');
if ($.inArray(accountId, LastSearchedAccountsIds) > -1) {
AreClickedButtonsEnable = true;
$(this).attr('checked', true);
AccountClicked(this);
}
// uncheck the other goals
else {
$(this).attr('checked', false);
}
if(e>=numElem-1){
// second part
$('#commercialGoalsTable li input').each(function () {
isGetLastSearchOperation = true;
var goalId = $(this).attr('id');
if ($.inArray(goalId, LastSearchedGoalsIds) > -1) {
AreClickedButtonsEnable = true;
$(this).attr('checked', true);
//CommercialGoalClicked(this);
}
// uncheck the other goals
else {
$(this).attr('checked', false);
}
});
}
});
编辑::忘记零位,编辑if语句来处理。
的小提琴