首页 > 解决方案 > ajax调用阻止锚标记的HREF值后返回false不起作用

问题描述

我有一个这样的链接。

<a class="case" href="/communication/index">Link Name</a>

我有一个处理程序。

 $('.case').on('click',function () {
        checkCaseIsParked(this);
  });

在这个 checkCaseIsParked 方法中,我有 ajax 调用,如果成功,我比较返回值,如果它是真的,那么我想阻止它进入下一个站点,即 href 上的链接。

success: function (result, status, xhr) {
      if (result) { return false; }
            else { return true };
    }

我试过它返回假但没有运气

标签: javascriptjqueryajax

解决方案


return false必须同步发生。由于在响应返回之前您不知道重定向是否应该发生,因此您应该return false(或preventDefault())不管,然后,如果响应说重定向是好的,手动click()它:

const checkCaseIsParked = elm => {
  console.log('processing');
  setTimeout(() => {
    if (elm.id === 'case') {
      elm.click();
    } else {
      console.log("failed");
    }
  }, 1000);
};

$('#case, #case2').on('click', function(event) {
  if (event.originalEvent.isTrusted) {
    // event was triggered by user input, not by Javascript
    checkCaseIsParked(this);
    event.preventDefault();
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a id="case" href="/communication/index">pass</a>
<a id="case2" href="/communication/index">fail</a>


推荐阅读