防止 iframe 回发调用 jQuery“ready” 父函数

发布于 2024-07-26 09:57:15 字数 1118 浏览 0 评论 0原文

我在 jQuery 选项卡布局中有一个 iframe。 我正在使用 iframe 上传图像,模拟 AJAX 文件上传。 似乎每当我的 iframe 回发时,它都会导致父页面的 $(document).ready 执行,从而重置我所在的当前选项卡。

关于如何防止这种情况有什么想法吗?

    function uploadDone() {

    var data = eval("("+ $('#upload_target').contents().find('body').html() +")");
    if(data.success) {
       $('#upload_summary').append("<img src='" + data.full_path + "' />");
       $('#upload_summary').append("<br />Size: " + data.file_size + " KB");
    }
    else if(data.failure) { //Upload failed - show user the reason.
        alert("Upload Failed: " + data.failure);
    }
}

$(document).ready(function() {

    $('#image_uploader').submit(function() {

        if($.browser.safari || $.browser.opera) {

            $('#upload_target').load(function(){
                setTimeout(uploadDone, 0);
            });

            var iframe = document.getElementById('upload_target');
            var iSource = iframe.src;
            iframe.src = '';
            iframe.src = iSource;

        } else {

            $('#upload_target').load(uploadDone);
        }
    });

});

I have an an iframe within a jQuery tab layout. I am using the iframe to upload an image, to simulate a AJAX file upload. It seems whenever my iframe postbacks, it causes the parent page's $(document).ready to execute, resetting the current tab I am positioned on.

Any ideas on how to prevent this?

    function uploadDone() {

    var data = eval("("+ $('#upload_target').contents().find('body').html() +")");
    if(data.success) {
       $('#upload_summary').append("<img src='" + data.full_path + "' />");
       $('#upload_summary').append("<br />Size: " + data.file_size + " KB");
    }
    else if(data.failure) { //Upload failed - show user the reason.
        alert("Upload Failed: " + data.failure);
    }
}

$(document).ready(function() {

    $('#image_uploader').submit(function() {

        if($.browser.safari || $.browser.opera) {

            $('#upload_target').load(function(){
                setTimeout(uploadDone, 0);
            });

            var iframe = document.getElementById('upload_target');
            var iSource = iframe.src;
            iframe.src = '';
            iframe.src = iSource;

        } else {

            $('#upload_target').load(uploadDone);
        }
    });

});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情愿 2024-08-02 09:57:16

标志是有意义的(正如 SolutionYogi 提到的)。 如果父框架中的 document.ready 只需要执行一次,请将全局标志设置为一个值,您可以在它再次触发时检查该值。

另一种方法是执行完 document.ready 后解除绑定。
例如 $(document).unbind('ready')

A flag makes sense (as what SolutionYogi mentioned). If the document.ready in the parent frame is only required to execute once, set a global flag to a value which you can check when it got fired again.

Another way is to unbind document.ready after executing it.
E.g. $(document).unbind('ready')

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文