Возврат false не работает после вызова ajax, чтобы заблокировать значение HREF тега привязки - PullRequest
0 голосов
/ 23 июня 2019

У меня есть такая ссылка.

<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 };
    }

Я пытался вернуть ложь, но не повезло

1 Ответ

1 голос
/ 23 июня 2019

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...