1

この jsfiddle を CHrome で実行すると動作しますが、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 と FF では動作しません。jsfiddle の結果から判断します。

これまでにこれに対処しなければならなかった人はいますか?

4

2 に答える 2

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);
});

フィドル

于 2013-06-03T22:37:18.150 に答える
-1

FF ではsetTimeout()、フィドルの最後の行に a を追加すると、次のように機能します。

$('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);
于 2013-06-03T22:43:10.967 に答える