【问题标题】:Avoid link visit if html element has class如果 html 元素有类,则避免链接访问
【发布时间】:2015-02-03 20:52:32
【问题描述】:

我有一个 HTML 元素作为文章的购买链接。当本文售罄时,此链接将获得 class="sold-out"。当有人单击该链接时,它将打开一个包含结帐表单的 jQuery maginific-popup。但是,当它具有我想要的“售罄”类时,该链接不可点击。为了实现这种链接跟踪预防,我遇到了问题。

我的 HTML:

<a href="checkout.php" class="btn-1 ajax-popup sold-out">Purchase</a>

我的 JS:

$('.ajax-popup').mousedown(function(e){
    e.preventDefault();
    if($(this).hasClass("sold-out")) {
        return false;
    }
    var region = $(this).data('region');
    var quantity = $(this).data('quantity');
    if(typeof quantity == 'undefined') quantity = $(this).parent().find('select').val();
    var packageid = $(this).data('packageid');

    $(this).magnificPopup({
      type: 'ajax',
      ajax: {
          settings: {
              data : {
                  region : region,
                  quantity : quantity,
                  packageid : packageid,
              }
          }
      },
      closeOnContentClick: false,
      closeOnBgClick: false
   });

});

会发生什么: 事实上,它避免了 ajax-popup,但在这种情况下,它仍然遵循 HTML 元素的链接,但它不应该做任何事情。怎么了?

【问题讨论】:

    标签: javascript jquery html magnific-popup


    【解决方案1】:

    您还需要添加e.stopPropagation() 以防止点击触发。

    您只是在侦听mousedown 事件,但也会在元素上触发click 事件,默认情况下,&lt;a&gt; 标记的click 事件将跟随href 属性。

    我很好奇你为什么绑定到mousedown 事件而不是click 事件?如果您更改为click 事件,我相信e.preventDefault() 会直接处理。

    【讨论】:

    • 在 preventDefault 之后添加 stopPropogation 对我没有用,但是将 mousedown 更改为 click 对我有用。谢谢你的解释。我会记住这一点:)。我可以在 8 分钟内接受这个答案 - 你已经很快了:P
    • stopPropagation 将工作。我认为您在拼写 Propogation 时有拼写错误,但是是的,使用 click() 更好。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多