У меня проблема с обратным вызовом в jquery внутри другого обратного вызова для события click в диалоговом окне.
Это первая функция обратного вызова, которую я вызываю после сохранения
function onSaveTicketCompleted(result) {
var obj;
if (typeof (result) == "object")
obj = result;
else
obj = eval("(" + result + ")");
hideWaiting();
if (obj) {
if (obj.error != "") {
alert(t('alert.generic_error_genericerror') + obj.error);
enableSaveButton();
}
else {
var reqid = obj.requestid;
var msg = "Created ticket " + obj.ticketid;
doConfirm('#confirmBox', msg, function yes() {
OpenRequestAfterSave(reqid);
});
}
}
}
Внутри этой функции я вызываю функцию doConfirm, которая отображает небольшое диалоговое окно и имеет следующий вид:
function doConfirm(confirmboxsel,msg, yesFn, noFn) {
var confirmBox = $(confirmboxsel);
confirmBox.find(".message").html(msg);
confirmBox.find(".yes,.no").unbind().click(function () {
confirmBox.hide();
});
confirmBox.find(".yes").click(function () { hideWaiting(); if (yesFn != null) yesFn(); });
confirmBox.find(".no").click(function () { hideWaiting(); if (noFn != null) noFn(); });
modalWaiting();
confirmBox.show();
}
Это отображаемое диалоговое окно
<div id="confirmBox" class="confirmbox">
<div class="message"></div>
<button class="yes"><span i18n="button.ok"></span></button>
</div>
Обратный вызов OpenRequestAfterSave является следующим
function OpenRequestAfterSave(reqid) {
var idxml = "<requests><code_id>" + reqid + "</code_id></requests>";
var userid = parseInt($('#hfCODE_USERID').val());
lockResource(idxml, 1, userid, OnCheckForOpenReqAfterSaveNew);
return false;
}
lockResource делает Ajax вызов, который выполняется правильно, но после возврата не входит в обратный вызов OnCheckForOpenReqAfterSaveNew.
function lockResource(xmlid,sourceType,userid,lockCallback, params) {
if(xmlid)
{
if(sourceType)
{
if(userid)
{
ajaxServiceSupport.lockStatusEntityById(xmlid, userid, sourceType, lockCallback, OnWSError, params);
}
else
alert(t("alert.lock_impossiblefinduserreserve"));
}
else
alert(t("alert.lock_impossibleverifylocktype"));
}
else
alert(t("alert.lock_impossibleverifylocksource"));
}
Есть ли способ сделать yesFn () ждать до завершения всех функций и обратного вызова внутри? Спасибо