2009-09-16 35 views
1

我想創建一個將表單克隆到iframe然後提交表單的jQuery插件。假冒一個ajax文件上傳是個黑客攻擊。我也知道已經有這樣的插件了,但是沒有一個能滿足我的需求。我有一個問題追加到IE中的任何東西的jQuery對象。 (我正在運行IE 7.0)我已經嘗試過FF,它完美的工作。我也使用jQuery 1.3.2分鐘。任何幫助將不勝感激。追加一個jQuery對象在IE中拋出無效參數

(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); 
+0

你的頁面中是否有ID爲「asdfasda」的元素? – 2009-09-16 00:22:36

+0

您確定的代碼行正在執行多項操作。如果您縮小哪個操作實際上引發錯誤,您可能會得到更好的幫助。 – 2009-09-16 00:39:52

+0

我創建一個ID爲'asdfasda'的iFrame。在某個時候,它將成爲一個唯一的ID。我可以附加HTML但不是jQuery對象。例如:$(「#」+ id).contents()。find(「body」)。append(「

stuff here
」)將工作但$(「#」+ id).contents()。find 「body」)。append($(「
stuff here
」))不會。附加的html不會複製文件輸入的值,這就是爲什麼我不能附加html,它必須被克隆。 I還簡化了我的代碼,使人們更容易幫助我,這就是爲什麼在一行上有多個操作,但我知道它的附加功能。 – 2009-09-16 01:04:29

回答

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的文檔中的節點,你必須有一個由<腳本加載的jQuery的第二個副本>標籤的iframe中,您通過的其他文件的副本調用$。每個jQuery實例都與包含它的文檔相關聯;一個文檔的jQuery包裝器不能傳遞給另一個文檔。

var inp= idoc.$('<input type="hidden" name="thing" />'); 
inp.val(thingvalue); 
idoc.$('#myform').append(inp); 
... 
+0

實際上,您並不需要將第二個jquery加載到iframe中。可以從iframe中抓取文檔並將其傳遞到生成節點的jquery函數中。 var doc = $('#theiframe')。contents()。get(o); //這是來自iframe $('

',doc); //這將創建新的表單節點,以便它屬於iframe。然後你可以添加它沒有問題。 – Marco 2010-04-07 19:37:28

0

難道你看看jQuery的表格插件,它可以讓你使用iframe提交文件輸入字段,check it here

也許你可以重新使用相同的,而不是重新發明輪子。

相關問題