2013-02-19 113 views
2

我無法讓jQuery的.submit()在IE或Firefox中工作,當我將表單作爲jQuery對象的文本傳遞。

例如,下面的代碼在Chrome和Safari,但在IE和Firefox什麼也沒有發生 - 沒有錯誤,什麼都沒有:

$('<form id="frm" action="http://www.stackoverflow.com" method="POST"></form>') 
    .submit(); 

注:「http://www.stackoverflow.com」上方,空單只是一個例子。在我的應用程序中,我的表單有一個「action =」的合法URL,它接受POST數據,我在動態構建的表單中指定爲隱藏控件。

如果我將構造的表單加載到html中的一個元素中,然後執行$('#frm').submit(),它就可以工作;不過,我寧願不走那條路。

這是已知的/預期的行爲還是我做錯了什麼?

~~~

響應於@DavidThomas,我通過獲得()調用到ASP .NET .ashx的處理程序構建<form>。我試圖儘量減少對<form>及其內容的暴露。

$.get('./ConstructForm.ashx', function (data) { $(data).submit(); }) 
    .fail(function() { alert('fail!'); }); 

我一個更安全的方式來做到這一點當然歡迎建議,但是這可能會是一個不同的問題的主題。

~~~

對於它的價值,我的做法最初是在此基礎上:https://stackoverflow.com/a/2054741/1530187

我試圖做到這一點使用一個結構化的字符串爲jQuery對象,而不是現有的元素,儘量減少用戶在提交之前或通過瀏覽器提交之後檢查表單的能力。

+4

它必須在它工作之前成爲DOM的一部分。否則,它只是一個片段不附加。 – prodigitalson 2013-02-19 23:29:31

+0

這可能是出於安全原因或其他原因,但我想IE/FFX將不會提交不在當前文檔中的表單。您可以將它追加到'',然後立即提交。 – 2013-02-19 23:30:31

+1

'$('

')'*創建*表單;它不會將其添加到文檔中。在附加之前,'submit()'處理程序不會/不能做任何事情。只有用戶可用時才能提交。而且,只有成功的表單元素被提交給服務器;由於您的表單不包含任何元素,因此無法提交。所以...希望你只是選擇了一種非常糟糕的方式來表示你的用例。你真的得到了什麼? – 2013-02-19 23:30:45

回答

0

你應該把形式到HTML,代碼像下面

var yourform = $('<form id="frm" action="http://www.stackoverflow.com" method="POST"></form>'); 

yourform.attr('target', '_blank'); //open in a new tab 
yourform.appendTo($(document.body)); // put your form into html 
yourform.submit(); 

它工作在IE和Firefox。

相關問題