jquery обратный вызов внутри другого обратного вызова не вызывается - PullRequest
0 голосов
/ 25 марта 2020

У меня проблема с обратным вызовом в 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 () ждать до завершения всех функций и обратного вызова внутри? Спасибо

...