2010-08-18 39 views
0

我有一个点击事件,在某些AJAX内容中动画显示到页面上。事件完成后jquery undelegate点击事件

一旦这个内容显示出来,并且用户点击了激活该过程的相同链接,我现在想要反转该过程并关闭当前打开的飞出内容。

目前打开的飞出是通过点击“关闭”链接或点击序列中的另一个飞出链接关闭的。如果用户点击当前的飞出链接,那么我希望当前的飞行关闭。

// 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; 

}); 

回答

2

.delegate()检查选择在每次获得一个事件,所以你可以这样做时间:

$('.widget').delegate('.widget .fly_out:not(.foClose)', 'click', function() { 
    $(this).addClass('foClose'); 
    //rest of current code 
}); 

然后在你的亲密委托听这个新的选择,以及:

$('.widget').delegate('.fly_container .close, .widget .foClose', 'click', function() { 
    $(this).removeClass('foClose'); 
    //rest of current code 
}); 

通过添加foClose类(或任何您想要命名的名称),按钮的单击事件将由关闭委托侦听来处理,而不是打开一个。如果点击并按照这种方式处理,它将删除foClass,再次将其作为弹出链接。

+0

智能一个昵称:) – RyanP13 2010-08-18 15:32:13

+0

使用相同的代码我如何等待,直到当前飞出是否打开新的飞出之前,如果点击一个链接是不是当前的? – RyanP13 2010-08-18 15:34:17

+0

@ RyanP13 - 你想排队他们,或忽略其他''fly_out'点击,而它的工作? – 2010-08-18 15:38:37

1

在飞出单击上,测试以查看菜单是否具有类current。如果有,请关闭弹出窗口,不要运行ajax方法。

if ($(this).hasClass("current")) { 
    $(this).removeCLass("current"); 
    closeFlyout(); 
    return; 
}