добавление объекта jquery вызывает неверный аргумент в IE - PullRequest
1 голос
/ 16 сентября 2009

Я пытаюсь создать плагин jQuery, который будет клонировать форму в iframe, а затем отправить форму. Подделка загрузки файла 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);

Ответы [ 2 ]

1 голос
/ 16 сентября 2009

клонировать форму в 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, у вас должна быть вторая копия jQuery, загруженная тегом в iframe, которую вы вызываете через копию * другого документа $. Каждый экземпляр jQuery привязан к документу, который его включил; Оболочка jQuery из одного документа не может быть передана другому документу.

var inp= idoc.$('<input type="hidden" name="thing" />');
inp.val(thingvalue);
idoc.$('#myform').append(inp);
...
0 голосов
/ 25 ноября 2009

Посмотрели ли вы плагин jQuery Form, он позволяет отправлять поле ввода файла с помощью iframe, отметьте здесь

Возможно, вы можете использовать то же самое, а не изобретать колесо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...