【问题标题】:Return false not working after ajax call to block HREF value of anchor tagajax调用阻止锚标记的HREF值后返回false不起作用
【发布时间】:2019-06-23 03:44:44
【问题描述】:

我有一个这样的链接。

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

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

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    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>

    【讨论】:

    • 感谢您的快速回复,但在我的情况下,该链接与 id 不同,它具有类,因为它在表的每一行上。阻止默认值正在工作,但现在在条件为假的情况下,它不会移动到下一个站点。我如何分类点击事件。
    • 请在问题本身中发布所有相关信息和要求(理想情况下,当您发布问题时,而不是在答案进来之后),所以我们有一个minimal reproducible example 来调试。让处理程序处理多个元素看起来在 sn-p 中工作正常,看看#case#case2
    • 它正在工作,我错过了添加一个条件来检查事件是否是原始的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2010-11-10
    • 1970-01-01
    • 2013-10-23
    • 2023-03-11
    • 2013-06-12
    • 2015-12-07
    相关资源
    最近更新 更多