1

我正在尝试在加载内容后调整 iframe 的大小。该页面(加载到 iframe 中)具有一些控件,可以使其将附加信息加载到页面底部,并且它通过 JQuery 的 $.ajax() 方法执行此操作。

我尝试过使用$(document).ajaxComplete(),但最终在 $.ajax() 方法成功事件之前注册。我想要做的是在成功事件之后注册一个事件。

例如:

<script type='text/javascript'>
$(document).ready(function(){
    resizeIframe();
    $(document).ajaxComplete("resizeIframe");
    $(document).load("resizeIframe");

});

function resizeIframe()
{
    $(window).parent().height($("body").height());
    $(window).scrollTop(0);
}
</script>

这适用于静态加载的页面。但是,如果我有这样的事情:

<script type='text/javascript'>
    $("someObject").on('click', function (){
       $.ajax({
            type: 'post',
            url: 'someurl.php',
            success: function(data) 
            {
                 $("body").append(data);
            }
       });
    });
</script>

然后 resizeIframe 在 .ajax 成功函数之前被调用(这意味着 dom 不包含那些添加元素,因此页面的高度错误。我想避免添加resizeIframe到我所做的每个 ajax 调用中,是否有事件我可以用它来解决这个问题吗?

更新

我试过这个:

$(document).ready(function(){
    resizeIframe();
    $(document).load(function(){ resizeIframe();});
    $(document).ajaxComplete(function(){
            setTimeout(resizeIframe, 0);
    });
});

它似乎在 Firefox 21 中工作。但是,它在 IE10 中不起作用(我必须向后兼容 IE8)。

4

1 回答 1

2

本地事件将始终在全局事件之前执行(本地成功 -> 全局成功 -> 本地完成 -> 全局完成)。您可以设置全局success事件:

$(document).ajaxSuccess("resizeIframe");

API 参考:http ://api.jquery.com/ajaxSuccess/

然后指定一个本地complete事件:

url: 'someurl.php',
complete: function(data) 
{
    $("body").append(data);
}

请注意,只要 AJAX 调用完成,就会运行完整的函数。

于 2013-06-06T23:02:17.883 回答