我有一个点击事件,可以将某些AJAX内容动画到页面上。
一旦显示此内容并且用户点击激活该过程的相同链接,我现在想要撤销该过程并关闭当前打开的飞出内容。
当前打开的飞出通过单击“关闭”链接或单击序列中的另一个弹出链接来关闭。如果用户点击当前的飞出链接,那么我希望当前的飞出结束。
// Close fly out function
function closeFlyout() {
$('.fly_container').animate({
'right': '-332'
}, 300, 'swing', function() {
$(this).detach();
/* TODO: z-index issues in IE7, IE6
$('.dark_overlay').fadeOut(300, function() {
$(this).remove();
});
*/
});
};
$('.widget').delegate('.widget .fly_out', 'click', function() {
/*
TODO: z-index issues in IE7, IE6
$('body').prepend('<div class="dark_overlay" />');
*/
var $widget = $(this).closest('.widget');
var $flyOutIndex = $(this).index('.fly_out');
if ($flyOutIndex == 0) {
$flyOutURL = 'Content/HTMLSnippets/Flyouts/Priceassessment/product_order.htm';
} else if ($flyOutIndex == 1) {
$flyOutURL = 'Content/HTMLSnippets/Flyouts/PriceHistory/price_history_comparisons.htm';
} else if ($flyOutIndex == 2) {
$flyOutURL = 'Content/HTMLSnippets/Flyouts/PriceHistory/price_history_scenarios.htm';
} else if ($flyOutIndex == 3) {
$flyOutURL = 'Content/HTMLSnippets/Flyouts/PriceHistory/price_history_analysis.htm';
}
$('.current').removeClass('current');
$(this).addClass('current');
// Close any open flyouts
closeFlyout();
$.ajax({
type: 'GET',
url: DashboardApplicationRoot + $flyOutURL,
dataType: 'html',
cache: true,
success: function(data) {
$($widget).prepend(data);
$('.fly_container').animate({ 'right': '0' }, 300);
$('.scroll').jScrollPane();
$('.striped li:nth-child(even)').addClass('odd');
}
});
return false;
});
// Close fly out function
$('.widget').delegate('.fly_container .close', 'click', function() {
closeFlyout();
$('.current').removeClass('current');
return false;
});
答案 0 :(得分:2)
.delegate()
都会检查选择器,因此您可以执行此操作:
$('.widget').delegate('.widget .fly_out:not(.foClose)', 'click', function() {
$(this).addClass('foClose');
//rest of current code
});
然后在你的close委托中也要听这个新选择器:
$('.widget').delegate('.fly_container .close, .widget .foClose', 'click', function() {
$(this).removeClass('foClose');
//rest of current code
});
通过添加foClose
类(或任何您想要命名的类),按钮的click事件将由关闭的委托侦听处理,而不是打开一个。如果点击并按此方式处理,则会删除foClass
,再次将其设为弹出链接。
答案 1 :(得分:1)
在弹出式点击时,测试菜单是否包含课程current
。如果是,请关闭弹出按钮,不要运行ajax方法。
if ($(this).hasClass("current")) {
$(this).removeCLass("current");
closeFlyout();
return;
}