丢失点击事件的范围'在ajax电话中

时间:2017-05-24 15:55:28

标签: jquery ajax scope click

我需要帮助尝试根据数据库通过ajax的结果停止发生保存事件。但是我似乎正在失去我的"事件"变量,我不知道如何保持它。非常感谢您的帮助。

基于点击保存按钮的功能:

jQuery('#saveButton').on('click',function(){
    checkForOpenActions(event)});

Ajax电话:

function checkForOpenActions(event) {
  // determine if case has any case actions that are not resolved.
  if (jQuery('#PboCaseResolution_caseAction').val() != '') {
    jQuery.getJSON("page.request.do?page=com.blah.ajax", {
        trackingId: '$!parentId'
      },
      function(data) {
        alert("data: " + data);
        if (data == 1) {
          alert("data is 1");
          if (confirm('There are open actions on this case.  Are you sure you want to close it?')) {
            return true;
          } else {
            stopSave(event);
            return false;
          }
        }
      });
  }
}

从Ajax调用以停止保存:

function stopSave(event){
    alert("preventing Default");
    event.preventDefault();
}

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

由于您在AJAX回调函数中执行确认,因此它以异步方式运行,因此您无法使用event.preventDefault() - 原始事件处理程序已经返回。

您需要无条件地调用event.preventDefault(),然后在用户确认时在回调函数中显式执行保存。您可以在包含按钮的表单上调用submit()来执行此操作。

jQuery('#saveButton').on('click', function(event) {
  checkForOpenActions(event);
});


function checkForOpenActions(event) {
  // determine if case has any case actions that are not resolved.
  if (jQuery('#PboCaseResolution_caseAction').val() != '') {
    event.preventDefault();
    jQuery.getJSON("page.request.do?page=com.blah.ajax", {
        trackingId: '$!parentId'
      },
      function(data) {
        alert("data: " + data);
        if (data == 1) {
          alert("data is 1");
          if (!confirm('There are open actions on this case.  Are you sure you want to close it?')) {
            return;
          }
        }
        event.target.form.submit();
      });
  }
}