感谢您的支持!-很抱歉,我的英语不好!
我使用此代码从页面条目中获取DOM组件以显示在主页上。
当我单击open-ajax
时,它将从条目页面加载DOM并显示在ajax-outer
中,当单击ajax-overlay
时,它将删除DOM。
但是我发现了一个错误,如果单击打开的ajax链接并立即单击ajax-overlay
,则get ()
仍将加载DOM并显示在ajax-outer
中。
似乎ajax-overlay
无法停止get ()
如何优化代码?
首页的HTML
<div class="main_content">
<a class="open-ajax" href="/link/101">1</a>
...
<a class="open-ajax" href="/link/10n">n</a>
</div>
<div class="ajax-wrap">
<div class="ajax-overlay"></div>
<div class="ajax-outer"></div>
</div>
条目的HTML
<div class="coupon_content">
<div class="abc">
....
</div>
</div>
Javascript:
$('.main_content').on('click', '.open-ajax', function(e) {
var gethref = $(this).attr('href');
e.preventDefault();
$('.ajax-wrap').addClass('active');
$.get(gethref, function(sch) {
$('.coupon_content', sch).each(function() {
$('.ajax-outer').append($(this).html());
$("body").addClass('noscroll');
});
});
});
$('.ajax-overlay').click(function(e) {
$('.ajax-wrap').removeClass('active');
$('.ajax-outer').children().remove();
$("body").removeClass('noscroll');
});
Vídụt} ngtự:https://dribbble.com/shots
答案 0 :(得分:1)
单击ajax-overlay
时可以隐藏open-ajax
并将其显示在成功回调中,这样可以确保在加载所有代码之前不会单击覆盖层:
$('.main_content').on('click', '.open-ajax', function(e) {
e.preventDefault();
var gethref = $(this).attr('href');
$('.ajax-wrap').addClass('active');
$('.ajax-overlay').hide();
$.get(gethref, function(sch) {
$('.coupon_content', sch).each(function() {
$('.ajax-outer').append($(this).html());
$("body").addClass('noscroll');
$('.ajax-overlay').show();
});
});
});
答案 1 :(得分:1)
您不能阻止ajax请求,但是可以阻止使用全局变量进行追加
var canAppend = true;
$('.main_content').on('click', '.open-ajax', function(e) {
var gethref = $(this).attr('href');
e.preventDefault();
$('.ajax-wrap').addClass('active');
$.get(gethref, function(sch) {
if(canAppend) {
$('.coupon_content', sch).each(function() {
$('.ajax-outer').append($(this).html());
$("body").addClass('noscroll');
canAppend = true;
});
}
});
});
$('.ajax-overlay').click(function(e) {
$('.ajax-wrap').removeClass('active');
$('.ajax-outer').children().remove();
$("body").removeClass('noscroll');
canAppend = false;
});