1

フォームを iframe に複製してからフォームを送信する jQuery プラグインを作成しようとしています。ajax ファイルのアップロードを偽装するためのハックです。このようなプラグインが既にあることも知っていますが、私のニーズを満たすものはありません。jQuery オブジェクトを IE の何かに追加する際に問題があります。(IE 7.0 を実行しています) FF を試してみましたが、完全に動作します。jQuery 1.3.2分も使用しています。どんな助けでも大歓迎です。

(function($){

$.fn.extend({ 

//pass the options variable to the function
formUploader: function(options) {

    //Set the default values, use comma to separate the settings, example:
    var defaults = {
        onSubmit: function(){ return true;},
        onComplete: function(){ return true;}
    }

    var settings =  $.extend(defaults, options);

    return this.each(function() {
        $(this).submit(function(){
        var id = "asdfasda";
    $(document).find('body').append('<iframe src="javascript:false;" name="' + id + '" id="' + id + '" />');

    //this should be a form
    var curEl = this;
    setTimeout(function()
    {
        //fails in IE but not in FF
        $("#"+id).contents().find("body").append($(curEl).clone());
    },250);
    return false;
        });
    });

    }
});

})(jQuery);
4

2 に答える 2

1

フォームを iframe に複製し、フォームを送信します

例からはわかりにくいですが、要素を別のドキュメントに複製しようとしている場合、それは DOM 標準では許可されていません。あるドキュメントで作成されたノードを別のドキュメントに挿入することはできません。iframe のコンテンツは別のドキュメントです。

それを行う方法は、次を使用することdocument.importNode()です。

var iframe= document.getElementById('myiframe');
var idoc= iframe.contentDocument || iframe.contentWindow.document;
var form= document.getElementById('myform');
idoc.body.appendChild(idoc.importNode(form, true));

しかし、IE は importNode をまったくサポートしていません。繰り返しになりますが、IE は既に XMLHttpRequest をサポートしているため、問題にはならないかもしれません。サポートしていない、これを実装しているブラウザは何XMLHttpRequestですか? 注意: 古い/壊れたブラウザはimportNode、jQuery をサポートしていない可能性もあります!

jQuery の便利なメソッドを使用して iframe のドキュメントにノードを作成する場合は、iframe の <script> タグによってロードされた jQuery の 2 番目のコピーが必要であることに注意してください。これは、他のドキュメントの のコピーを介して呼び出します$。各 jQuery インスタンスは、それを含むドキュメントに関連付けられています。あるドキュメントの jQuery ラッパーを別のドキュメントに渡すことはできません。

var inp= idoc.$('<input type="hidden" name="thing" />');
inp.val(thingvalue);
idoc.$('#myform').append(inp);
...
于 2009-09-16T10:50:32.830 に答える
0

jQuery Formプラグインを調べましたか。iframeを使用してファイル入力フィールドを送信できます。ここで確認してください

おそらく、車輪を再発明するのではなく、同じものを再利用することができます.

于 2009-11-25T13:40:30.693 に答える