gpt4 book ai didi

javascript - jQuery 弹出窗口在第一次单击时不起作用

转载 作者:行者123 更新时间:2023-11-30 12:28:54 26 4
gpt4 key购买 nike

我有几个不同文章的“立即购买”按钮。当按钮有类“售罄”时,它不应该做任何事情,否则它应该打开一个 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 内容(当然这在这里不起作用)。

最佳答案

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

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

所以你需要使用$.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 请求)来解决这个问题,如果这对您有用的话。

关于javascript - jQuery 弹出窗口在第一次单击时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com