如何将AJAX内容加载到当前的Colorbox窗口中?

时间:2011-03-11 13:13:06

标签: jquery ajax colorbox

我已经连续三天都在寻找答案了。问题是我有一个页面,链接上应该加载Colorbox的AJAX内容,而这些内容又包含应该在同一个Colorbox模式窗口中加载的链接。到目前为止,我设法让它(部分)通过这个工作:

<script type="text/javascript">
    $(document).ready(function(){
        $("a[rel='open_ajax']").live('click', function() {
            $.colorbox({
                href:$(this).attr('href')
            });
            return false;
        });
    });
</script>

如果我点击一个链接,它会加载一个Colorbox窗口,但是在这个窗口中,如果我点击它的链接,它会打开另一个Colorbox窗口。我希望将内容加载到当前内容中。会不会有任何想法。感谢名单!

P.S。主窗口中的链接:

<a title="Client Details" rel="open_ajax" href="http://localhost/client/details/123">Client Details...</a>

Colorbox中的链接都是相同的(它只是分页):

<a rel="open_ajax" href="http://localhost/client/details/123/1">1</a>
<a rel="open_ajax" href="http://localhost/client/details/123/2">2</a>
<a rel="open_ajax" href="http://localhost/client/details/123/3">3</a>
<a rel="open_ajax" href="http://localhost/client/details/123/4">4</a>
<a rel="open_ajax" href="http://localhost/client/details/123/5">5</a>

1 个答案:

答案 0 :(得分:16)

如果你需要将内容加载到同一个Colorbox而不是打开一个新实例,我首先要确保打开Colorbox的事件处理程序上下文是独占的,而不是挂钩到Colorbox中的'open_ajax'元素

这样的事情:

<script type="text/javascript">
    $(document).ready(function(){
        $("a[rel='open_ajax']:not(#colorbox a[rel='open_ajax'])").live('click', function() {
            $.colorbox({
                href:$(this).attr('href')
            });
            return false;
        });
    });
</script>

如果上述方法不起作用,请尝试使选择器更具体/唯一。

然后AJAX中的新内容直接进入你已经打开的Colorbox。

这样的事情:

$('#cboxLoadedContent a[rel="open_ajax"]').live('click', function(e){
    // prevent default behaviour
    e.preventDefault();

    var url = $(this).attr('href'); 

    $.ajax({
        type: 'GET',
        url: url,
        dataType: 'html',
        cache: true,
        beforeSend: function() {
            $('#cboxLoadedContent').empty();
            $('#cboxLoadingGraphic').show();
        },
        complete: function() {
            $('#cboxLoadingGraphic').hide();
        },
        success: function(data) {                  
            $('#cboxLoadedContent').append(data);
        }
    });

});