无法在FF或IE中写入iframe,只能在Chrome中写入

时间:2013-06-03 22:26:44

标签: javascript jquery

如果您在CHrome中运行此jsfiddle,它将起作用,但在IE和FF上它失败:http://jsfiddle.net/LbFPu/2/

我想它可以解决每个引擎如何写入DOM的问题?有没有办法等待以前的内容写?例如:

function firstMe(){
    $('body').append('<div id="first"></div>');
    // many other new elements appended
}

function thenMe(){
    $('#first').append('etc');
    // many of the recently appended elements being referenced
}

按顺序调用时,我想它可以在CHrome中正常工作,但不能在IE&amp; FF。从jsfiddle结果判断。

以前有人不得不处理这个问题吗?

2 个答案:

答案 0 :(得分:1)

这只是因为你试图写入尚未加载的iframe,看起来Chrome更快:

$('body').append('<iframe id="upload"></iframe>');
var form = $('<form enctype="multipart/form-data" id="image_upload" action="index.php">'
     + '<input type="file" accept="image/*" multiple name="img[]" id="image" />'
     + '<br>'
     + '<input type="submit" value="Upload images" class="upload" />'
     + '</form>');

$('#upload').on('load', function() {
    $(this).contents().find('body').append(form);
});

FIDDLE

答案 1 :(得分:-1)

在FF中,如果你在小提琴的最后一行附近添加setTimeout(),那就可以了:

$('body').append('<iframe id="upload"></iframe>');
var form = $('<form enctype="multipart/form-data" id="image_upload" action="index.php">' + 
    '<input type="file" accept="image/*" multiple name="img[]" id="image" />' + '<br>' + 
    '<input type="submit" value="Upload images" class="upload" />' + '</form>');
setTimeout(function () {
    $('#upload').contents().find('body').append(form);
}, 100);