Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在所有iframe完成加载后执行回调_Javascript_Jquery_Iframe - Fatal编程技术网

Javascript 在所有iframe完成加载后执行回调

Javascript 在所有iframe完成加载后执行回调,javascript,jquery,iframe,Javascript,Jquery,Iframe,尝试一个小的jquery插件,让用户体验html输入文件上传控制在不同浏览器中保持一致。它基本上是一个表单,它有一个嵌套在隐藏iframe中的html输入控件 该插件公开了诸如上传前和上传后等事件,我能够正确地连接这些事件 下面是我如何在上传后调用事件的示例 $.fn.createUpload = function(config){ //stuff $(myUploadIframe).load(function(){ var doc = this.content

尝试一个小的jquery插件,让用户体验html输入文件上传控制在不同浏览器中保持一致。它基本上是一个表单,它有一个嵌套在隐藏iframe中的html输入控件

该插件公开了诸如上传前<代码>和上传后<代码>等事件,我能够正确地连接这些事件

下面是我如何在上传后调用
事件的示例

$.fn.createUpload = function(config){
    //stuff

    $(myUploadIframe).load(function(){
        var doc = this.contentWindow.document;
        var txt = $(doc).text();

        //parse txt to get json results
        var result = frameWorkParser(txt);

        if(result.uploadSuccess){
            if(config.afterUpload){
                config.afterUpload(sender, result);
            }
        }
    });

    //other stuff
};
以下是我如何使用插件:

var config = {
    afterUpload: function(el, data){
        //set some hidden field
    },
    //other options
};
$('#btnSelectFile').createUpload(config);
如果我以某种方式调用了嵌套表单(即在iframe内部)submit方法,那么iframe将加载,并且我能够成功调用
afterUpload
事件

$.fn.createUpload = function(config){
    //stuff

    $(myUploadIframe).load(function(){
        var doc = this.contentWindow.document;
        var txt = $(doc).text();

        //parse txt to get json results
        var result = frameWorkParser(txt);

        if(result.uploadSuccess){
            if(config.afterUpload){
                config.afterUpload(sender, result);
            }
        }
    });

    //other stuff
};
但这是事情变得更棘手的地方。我试图在所有上传完成后执行一些逻辑

$.doUploads = function (callback) {
    $('iframe').each(function () {
        if (this.id.indexOf('_uploadContainer') > -1) {
            var doc = this.contentWindow.document;
            doc.forms[0].submit();
        }
    });
    callback();
};
在这里,我迭代所有插件创建的iframe(为上传而创建)并调用嵌套表单提交方法。但是这个调用并不等待随后的iframe
onload
事件完成,然后执行
回调

我希望回调函数在我的插件的
afterUpload
事件后执行。如何实现这一点?

设置一些int变量(例如
totaliframeload=0;
),该变量在每次iframe加载时递增。还可以在每次iframe加载时调用回调函数

在回调检查中,该int变量的长度是否等于
$('iframe').length
。当加载所有iFrame时,将匹配此条件

if(`totaliframeloaded==$('iframe').length){//all iframes are loaded
//callback coad
}else{
//do nothing/return
}