Javascript 在所有iframe完成加载后执行回调
尝试一个小的jquery插件,让用户体验html输入文件上传控制在不同浏览器中保持一致。它基本上是一个表单,它有一个嵌套在隐藏iframe中的html输入控件 该插件公开了诸如上传前<代码>和上传后<代码>等事件,我能够正确地连接这些事件 下面是我如何在上传后调用Javascript 在所有iframe完成加载后执行回调,javascript,jquery,iframe,Javascript,Jquery,Iframe,尝试一个小的jquery插件,让用户体验html输入文件上传控制在不同浏览器中保持一致。它基本上是一个表单,它有一个嵌套在隐藏iframe中的html输入控件 该插件公开了诸如上传前和上传后等事件,我能够正确地连接这些事件 下面是我如何在上传后调用事件的示例 $.fn.createUpload = function(config){ //stuff $(myUploadIframe).load(function(){ var doc = this.content
事件的示例
$.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(为上传而创建)并调用嵌套表单提交方法。但是这个调用并不等待随后的iframeonload
事件完成,然后执行回调
我希望回调函数在我的插件的afterUpload
事件后执行。如何实现这一点?设置一些int变量(例如totaliframeload=0;
),该变量在每次iframe加载时递增。还可以在每次iframe加载时调用回调函数
在回调检查中,该int变量的长度是否等于$('iframe').length
。当加载所有iFrame时,将匹配此条件
if(`totaliframeloaded==$('iframe').length){//all iframes are loaded
//callback coad
}else{
//do nothing/return
}