Opera无法识别iframe.load

时间:2011-09-30 18:40:52

标签: jquery browser iframe load opera

我有一个通过iframe上传的文件。我现在在Opera以外的所有浏览器中工作。首先提交表格,我有

$(document).ajaxComplete(function() {
    $('.aboutContentImageForm').each(function() {
        var $this = $(this);
        $this.find('[type=file]').change(function() {
            $this.submit();
        });
    });
});

然后要捕获返回的帖子数据,我使用

$('.aboutContentImageForm').live('submit', function() {     
    $('#' + $this.attr('target')).load(function() {

        var responseHtml = $(this).contents().find('body'),
        response = responseHtml.html();

        alert(response);
    });
});

我的HTML

<form action="ajax/about_content.php" method="post" enctype="multipart/form-data" class="aboutContentImageForm" target="form_image_upload_content_id_8">
    <fieldset>                          
            <input type="file" name="image_path" id="image_path_8">
    </fieldset>
</form>
<iframe id="form_image_upload_content_id_8" name="form_image_upload_content_id_8"></iframe>

所以我的表单以iframe为目标,然后在iframe完成加载后,抓取返回的数据。

我可以确认iframe正在获取响应数据。点击提交后,我可以在框架中看到它。我只是无法捕获iframe接收所述数据的事件。这是.load()的错误吗?

修改

alert放在load()之后,它看起来已经认识到此操作已完成,但为什么我无法获取我的回复数据?

1 个答案:

答案 0 :(得分:1)

我认为你有正确的方法,但是在用户代理之间的iFrame中,DOM准备就绪存在不一致。 jQuery的表单插件使用相同的技术。看一下这个插件的源代码,我可以看到他们不得不跳舞来处理这个问题,并特别提到了Opera。

您可能希望了解一些想法:https://github.com/malsup/form/blob/e77e287c8024d200909a7b4f4a1224503814e660/jquery.form.js#L409