我正在使用colorbox(jquery插件)显示多步注册过程。我在“ iframe”模式下使用颜色框。

$('#signup').colorbox({
    width:     '500px',
    height:    '250px',
    opacity:   '.5',
    scrolling: false,
    fixed:     true,
    iframe:    true
});


由于不同步骤的内容具有不同的高度,因此我希望colorbox在加载新步骤时自动调整自身大小。

我在iframe内容中使用了以下代码(仅在文档结尾附近的脚本标签中):

$(function() {
    var iH = $(document.body).height();
    console.log("iframe height: " + iH);
    parent.$.colorbox.resize('height', iH);
});


在此之前,我尝试过一个简单的版本:

parent.$.colorbox.resize();


但是在两种情况下,我最终都陷入了一个无限循环:iframe的内容被无休止地重新加载,并且从未真正显示过(有时我实际上可以看到它闪烁)。
在此过程中(在第一个循环中)调整了iframe的大小,因此它似乎部分起作用。但是新尺寸对于预期的内容来说似乎太小了,所以我真的不知道...

知道为什么这行不通以及如何解决吗?

更新:
如果将上述脚本(简单版本)放在第二步而不是放在第一步,则可以避免无限循环,但是当我单击以转到第二步时,实际上是加载了第一步,而不是第二步。
如果将此脚本放在第三步,也会发生同样的事情:第一步已加载。
因此,似乎在执行其“调整大小”功能时,colorbox会从头开始重新启动所有内容吗?...

最佳答案

我在这里找到了解决方案:http://groups.google.com/group/colorbox/browse_thread/thread/fadc3d68ca764de3/c38fa24136a6abd7?pli=1

将其添加到colorbox.js(ColorBox v1.3.17.2,在r 533上的publicMethod.resize之前):

publicMethod.myResize = function (iW, iH) {
 if (!open) {
    return;
 }
 if (settings.scrolling) {
    return;
    }
 var speed = settings.transition === "none" ? 0 : settings.speed;
 $window.unbind('resize.' + prefix);
 settings.w = iW;
 settings.h = iH;
 $loaded.css({
    width: settings.w,
    height: settings.h
 });
 publicMethod.position(speed);
};


并将其添加到iframe中打开的页面中:

 $(document).ready(function (){
    $(window).bind('load', function () {
        var frameWidth = $(document).width();
        var frameHeight = $(document).height();
        parent.$.fn.colorbox.myResize(frameWidth, frameHeight);
    });
 });


为了绑定colorbox函数,我使用了以下选项:

$('.item').colorbox({
    transition: 'none',
    iframe      : true,
    scrolling   : false
});

关于javascript - Colorbox在colorbox.resize上重新加载iframe内容时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7448628/

10-11 23:55