Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery总是阻止第一次单击的操作_Javascript_Jquery_Html_Magnific Popup - Fatal编程技术网

Javascript jQuery总是阻止第一次单击的操作

Javascript jQuery总是阻止第一次单击的操作,javascript,jquery,html,magnific-popup,Javascript,Jquery,Html,Magnific Popup,我有几个不同物品的“立即购买”按钮。当按钮使类“售完”时,它不应该做任何事情,否则它应该打开一个jQuery放大弹出窗口。到目前为止,这是可行的。我的问题是,当我第一次点击主页上可购买的“立即购买”按钮时,它什么也没做。当我第二次单击它时,它会打开jQuery窗口。但是为什么它第一次不起作用呢 我的HTML: <a href="payment_options.php" class="btn-1 ajax-popup" data-region="EUW" data-packageid="1"

我有几个不同物品的“立即购买”按钮。当按钮使类“售完”时,它不应该做任何事情,否则它应该打开一个jQuery放大弹出窗口。到目前为止,这是可行的。我的问题是,当我第一次点击主页上可购买的“立即购买”按钮时,它什么也没做。当我第二次单击它时,它会打开jQuery窗口。但是为什么它第一次不起作用呢

我的HTML:

<a href="payment_options.php" class="btn-1 ajax-popup" data-region="EUW" data-packageid="1" style="display: inline-block;">Purchase Now</a>
$('.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
   });

});

这可能是因为您正在click函数中声明弹出定义。您可以尝试在click函数之外声明函数吗?

它不会在第一次单击时打开,因为这是您将其绑定到元素的时间

Hovewer,我们在文档中看到,我们可以立即打开放大弹出窗口

// Open popup immediately. If popup is already opened - it'll just overwite the content (but old options will be kept).
// - first parameter: options object
// - second parameter (optional): index of item to open
$.magnificPopup.open({
  items: {
    src: 'someimage.jpg'
  },
  type: 'image'

  // You may add options here, they're exactly the same as for $.fn.magnificPopup call
  // Note that some settings that rely on click event (like disableOn or midClick) will not work here
}, 0);

只有在单击元素后,才能在元素上设置
magnificPopup
,所以只有在第二次单击后才会打开,我不是在jQuery的第一部分声明了吗?我该怎么做才能解决这个问题??当我使用mousedown事件处理程序而不是click事件处理程序时,它会工作。但是我需要单击手柄它不工作吗
$('.ajax popup').each(function(){$(this.magnificpoup(…);})点击处理程序之外?我不明白你的想法A.沃尔夫?我应该在
放大弹出(…)
中说明什么?不要使用单击处理程序,而是使用一个each循环来设置带有各自数据的插件。我已将.open添加到我的放大弹出行中,如下所示
$(this).magnificpoup.open({
)没有更改任何内容。我尝试用您的代码创建页面并添加open()方法,可以说它解决了这个问题。(您可以在那里看到我的测试代码,我只是将ajax更改为内联弹出以简化测试)
$.magnificpoup.open({
我刚刚将类型更改为ajax并使用它运行,它也显示ok。我认为您的问题在于您将代码片段放错了位置。当它第一次执行时,有些东西没有加载(似乎是弹出的).F.e.,尝试将所有代码放在文件的末尾。我打赌95%的问题在这里。为什么要加载两次弹出窗口,缩小版和完整版?这可能是错误的原因。对于浏览器来说,它们都是相同的。@kentor Ya,因为mousedown是在用于打开弹出窗口的click事件之前触发的。但是,您正在重新初始化plugi在每一个鼠标下