2014-02-26 23 views
2

我創建使用JavaScript形式像爲什麼我需要追加的形式身體

//Create a form 
var form = document.createElement('FORM'); 
form.name = 'myForm'; 
form.method = 'POST'; 
form.action = 'SomePath'; 
//Create a hidden filed 
var hidden = document.createElement('INPUT'); 
hidden.type = 'HIDDEN'; 
hidden.name = 'MyHiddenField'; 
hidden.value = 'MyHiddenFieldValue'; 
form.appendChild(hidden); 
//Submit form 
form.submit(); 

當腳本執行。所有的語句執行沒有任何錯誤。但表格實際上沒有提交。

但是,當我追加它的文件。像

document.getElementsByTagName('body')[0].appendChild(form); 

//Submit form 
form.submit(); 

一切工作正常。我的問題是爲什麼我需要將表單追加到主體?我錯過了什麼。

編輯:它沒有追加表格body

+1

我想,因爲那會被添加到DOM,否則你只能創建新的元素,但不能將它們附加到DOM。你也可以使用document.body.appendChild(form); –

+0

有人[這裏](http://www.bennadel.com/blog/1204-you-cannot-submit-non-rendered-forms.htm)在2008年有同樣的問題... – user3526

回答

5

不知道肯定,我會推測,DOM和Javascript的創建者看到form是一個固有的依賴於文檔的實體,並沒有考慮到能夠提交未附加到DOM。

無論如何,如果你只是不想看到它,那麼你附上表格前,做

form.style.visibility = 'hidden'; 
+0

感謝您的回答,但它的工作完美。你對此有何看法? – Satpal

+0

我想我的看法是,它真的取決於瀏覽器如何實現(很有可能)非規範/未在規範中預期的事情:處理未附加到文檔的表單上的提交。 Chrome的實現可以與此協作,其他人則不會。 – Faust

4

提交什麼方法做,完全取決於被包含在DOM:

標準使用HTML表單需要加載發送數據的頁面,這意味着整個頁面都會刷新。

它實際上需要在頁面加載中發送DOM。

在Ajax出現的時候,我們使用隱藏的iframe發送表單,而實際頁面沒有被刷新。

但是,如果你想使用表單元素,創建一個Http調用而不刷新頁面,你需要通過JavaScript來完成。

這是最好的參考在那裏,這將有助於你決定如何你想使用什麼HTML表單標籤做的一個:

Sending forms through JavaScript

相關問題