【问题标题】:jQuery popup doesn't work at the first clickjQuery弹出在第一次点击时不起作用
【发布时间】:2015-02-06 00:03:54
【问题描述】:

我有几个不同文章的“立即购买”按钮。当按钮具有“售罄”类时,它不应该做任何事情,否则它应该打开一个 jQuery Magnific Popup。这通常有效,但由于我使用事件处理程序“Click”而不是“mousedown”,因此仅在第二次单击后才会打开华丽的弹出窗口。我不知道如何解决它。我猜是因为初始化什么的,但我不明白。

我的 HTML:

<a href="payment_options.php" class="btn-1 ajax-popup" data-region="EUW" data-packageid="1" style="display: inline-block;">Purchase Now</a>

我的 JQuery:

$('.open-popup-link').magnificPopup({
  type:'inline',
  midClick: true,
  mainClass: 'mfp-fade'
});



$('.ajax-popup').click(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
   });

});

JSFiddle:http://jsfiddle.net/fyLgp1yx/

正如您在此处看到的,它仅尝试第二次单击以访问 ajax 内容(这在此处当然不起作用)。

【问题讨论】:

  • 试试$('.ajax-popup').each('click', function(e){ ... });
  • 这正在破坏我的宏伟弹出窗口。它只是试图访问html元素中声明的链接。

标签: javascript jquery html magnific-popup


【解决方案1】:

这里发生的情况是该链接尚未绑定到 magnificPopup,它是在您第一次单击它时。那么,当你再次点击时,它就会被执行。

element.magnificPopup() 不应包含在点击事件中,因为调用它实际上是绑定事件,而不是执行它。

所以你需要使用$.magnificPopup.open(),像这样:

var serialize = function(obj) {
  var str = [];
  for(var p in obj)
    if (obj.hasOwnProperty(p)) {
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
    }
  return str.join("&");
}

$('.open-popup-link').magnificPopup({
  type:'inline',
  midClick: true,
  mainClass: 'mfp-fade'
}); 

$('.ajax-popup').click(function(e){
    e.preventDefault();

    if($(this).hasClass("sold-out")) {
        return false;
    }
    var data = {
      region : $(this).data('region'),
      quantity : $(this).data('quantity'),
      packageid : $(this).data('packageid')
    };
    if(typeof data.quantity == 'undefined') data.quantity = $(this).parent().find('select').val();

    $.magnificPopup.open({
        items:{
          src:$(this).attr('href') + '?' + serialize(data),
          type: 'ajax',
          closeOnContentClick: false,
          closeOnBgClick: false
        }
    });

});

JS Fiddle Demo

我想不出像使用常规 Ajax 一样发布数据的方法,所以我通过将数据附加到 URL(GET 请求)来解决这个问题,如果这对你有用的话。

【讨论】:

  • 好的,现在打开直接在第一次点击时工作,但我还需要传输发送者对象,这就是我使用点击事件处理程序的原因。我需要使用它来获取按钮数据并获取数量(由附近的选择元素提供)。此外,我需要此对象来检查发件人链接是否具有“已​​售罄”类。
  • 我看到这导致了一些问题。还在看。
  • 我想我找到了解决方案。这对你有用吗?
  • 我没有得到这个解决方案的数量、地区等信息。似乎真的很棘手:(。到目前为止感谢您的帮助!
  • 好的,文档中对此一无所知,这很烦人,没有任何作用。所以我尝试了一种解决方法。这不是最好的解决方案,但是当我尝试时它正在发送数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
相关资源
最近更新 更多