2012-08-15 97 views
1

我試圖發佈動態創建的表單,並在新窗口中看到結果 ,它只能在Chrome中使用。 FF和IE都不會做任何事情時,擊中該代碼。jquery form .submit()僅適用於Chrome

$('<form>').attr({ method: 'POST', action: data.Url, target: '_blank' }) 
    .append($('<input>').attr({ type: 'hidden', name: 'Field1', value: data.field1Data })) 
    .append($('<input>').attr({ type: 'hidden', name: 'Field2', value: data.field2Data })) 
    .submit(); 

是什麼原因造成的?

+0

你能提供一個你的代碼的實例嗎? – Jorge 2012-08-15 15:18:11

+0

我希望IE不能工作,因爲在IE中你不能在創建輸入後設置/改變輸入的類型屬性。儘管如此,我預計它會在FF中工作,但我懷疑它出於類似的原因而失敗。 – 2012-08-15 15:19:03

+0

@KevinB您可以在IE中初始設置類型,您不能更改已建立輸入的類型。它們是有區別的。我知道jQuery * docs *([源代碼只檢查已建立的輸入](https://github.com/jquery/jquery/blob/master/src/attributes.js#L378))否則,但我已經測試過它在IE6-9中。我可能會在某一天做出錯誤報告。 – Esailija 2012-08-15 15:19:51

回答

5

形式必須至少在IE的文件中,很可能在Firefox太看來:

$('<form>').attr({ method: 'POST', action: data.Url, target: '_blank' }) 
    .append($('<input>').attr({ type: 'hidden', name: 'Field1', value: data.field1Data })) 
    .append($('<input>').attr({ type: 'hidden', name: 'Field2', value: data.field2Data })) 
    .appendTo("body") 
    .submit() 
    .remove(); 
+2

在這種情況下,您可能還想在添加表單之前隱藏該表單。 – Blazemonger 2012-08-15 15:19:45

+0

@Blazemonger'.remove()'應該可以工作 – Esailija 2012-08-15 15:23:52

+0

謝謝!將它附加到身體就可以完成這項工作。 – Jacob 2012-08-15 15:27:38

0

試着在後面加上你的HTML裏面的形式第一,在最後調用提交之前加()如:

.appendTo('body').submit();