我有一个壮观的弹出页面:
function dataLink(){
$.magnificPopup.open({
items: {
src: 'datapage.html',
type: 'ajax'
},
closeOnContentClick : false,
closeOnBgClick :true,
showCloseBtn: false,
enableEscapeKey : false,
callbacks: {
open: function(){
$.magnificPopup.instance.wrap[0].addEventListener('focus', mpTable);
},
close: function(){
$.magnificPopup.instance.wrap[0].removeEventListener('focus', mpTable);
},
}
});
}
datapage.html
有两个表,我可以根据上下文隐藏或显示这些表(页面加载时显示data1table
并隐藏data2table
):<div class="white-popup">
<table id="data1table" class="table1">
</table>
<table id="data2table" class="table2">
</table>
</div>
在table1中,有一个按钮隐藏
table1
并显示table2
。在table2
中,有一个按钮可以调用javascript函数来发送数据:<input onclick="dataCheck()" type="button" value="Check Data" />
然后调用:
function dataCheck(){
if(datacheck[0]==false || datacheck[1]==false){
alert("Please enter data in all fields correctly.");
} else{
$.ajax({
url: 'dataconfirm.php',
type: "POST",
async: false,
data: {
},
dataType: 'json',
success: function(data){
alert("Thank you!");
localdata=data;
$.magnificPopup.close();
}
});
};
}
我的挑战是,当您单击按钮调用
dataCheck()
时,它会还原为显示table1
(最初由Magnific Popup加载),而实际上不会事件调用dataCheck()
。如果用户再次单击该按钮以显示table2
,则他们可以再次单击该按钮dataCheck()
,它会正常工作。感谢您的任何想法-我不知为什么会发生这种情况,尤其是考虑到它第二次起作用了。 最佳答案
我终于弄清楚了这个问题。在回调中,我根据Magnific Popup及其他人的建议创建了一个EventListener,以允许对DOM元素进行操作。这是因为open
回调发生在创建元素之前,因此,如果您尝试直接从该回调中进行更改,则会收到一个不存在的错误。可在此处找到此信息(我在某种程度上回答了我的问题,因为看来其他人已经被afterload
回调(即Magnific popup: Get current element in callback)的方式弄乱了:
https://github.com/dimsemenov/Magnific-Popup/pull/634
https://github.com/dimsemenov/Magnific-Popup/issues/632
但是,在focus
中使用EventListener
作为事件显然是有问题的,因为单击第二个按钮会使页面重新聚焦,并触发EventListener
(这是我看到的奇怪行为的地方) 。我尝试使用其他类型的event
,在这种情况下为onload
:
$.magnificPopup.instance.wrap[0].addEventListener('onload', mpTable);
哪种有效...但是随后导致了其他问题。最好的解决方案是更新mpTable函数,使其仅触发一次:
function mpTable(e){
e.target.removeEventListener(e.type, arguments.callee);
//other stuff that the function does
}
我希望有一天能对某人有所帮助!